Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b77ae450 authored by Todd Poynor's avatar Todd Poynor
Browse files

Remove metrics collector service trampoline

No longer needed to trampoline between RTTI and non-RTTI compiles.

Move the service impl from libmetricscollector service to the
metrics_collector executable, now that RTTI is no longer used (and the impl
is not used by binder clients).

Other fixups, including:
* Move service registration and binder watcher to metrics_collector main.
* Compile libmetricscollectorservice with clang just because.

Bug: 26292405
Change-Id: Iae8115c13b203ff03d49bf7678d5eb3ede30e855
parent 946d8152
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ metrics_collector_common := \
  collectors/cpu_usage_collector.cc \
  collectors/disk_usage_collector.cc \
  metrics_collector.cc \
  metrics_collector_service_trampoline.cc \
  persistent_integer.cc

metricsd_common := \
@@ -102,13 +101,13 @@ include $(BUILD_STATIC_LIBRARY)
# ==========================================================
include $(CLEAR_VARS)
LOCAL_MODULE := libmetricscollectorservice
LOCAL_CLANG := true
LOCAL_SHARED_LIBRARIES := libbinder libbrillo-binder libchrome libutils
LOCAL_CPP_EXTENSION := $(metrics_cpp_extension)
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)/include
LOCAL_SRC_FILES := \
  aidl/android/brillo/metrics/IMetricsCollectorService.aidl \
  metrics_collector_service_impl.cc \
  metrics_collector_service_client.cc
include $(BUILD_STATIC_LIBRARY)

@@ -166,7 +165,8 @@ LOCAL_INIT_RC := metrics_collector.rc
LOCAL_REQUIRED_MODULES := metrics.json
LOCAL_SHARED_LIBRARIES := $(metrics_collector_shared_libraries)
LOCAL_SRC_FILES := $(metrics_collector_common) \
  metrics_collector_main.cc
  metrics_collector_main.cc \
  metrics_collector_service_impl.cc
LOCAL_STATIC_LIBRARIES := metricsd_binder_proxy \
  $(metrics_collector_static_libraries)
include $(BUILD_EXECUTABLE)
+14 −5
Original line number Diff line number Diff line
@@ -30,12 +30,13 @@
#include <base/strings/string_split.h>
#include <base/strings/string_util.h>
#include <base/strings/stringprintf.h>
#include <brillo/binder_watcher.h>
#include <brillo/osrelease_reader.h>
#include <dbus/dbus.h>
#include <dbus/message.h>

#include "constants.h"
#include "metrics_collector_service_trampoline.h"
#include "metrics_collector_service_impl.h"

using base::FilePath;
using base::StringPrintf;
@@ -128,10 +129,18 @@ int MetricsCollector::Run() {
    version_cumulative_cpu_use_->Set(0);
  }

  // Start metricscollectorservice via trampoline
  MetricsCollectorServiceTrampoline metricscollectorservice_trampoline(this);
  metricscollectorservice_trampoline.Run();
  // Start metricscollectorservice
  android::sp<BnMetricsCollectorServiceImpl> metrics_collector_service =
      new BnMetricsCollectorServiceImpl(this);
  android::status_t status = android::defaultServiceManager()->addService(
      metrics_collector_service->getInterfaceDescriptor(),
      metrics_collector_service);
  CHECK(status == android::OK)
      << "failed to register service metricscollectorservice";

  // Watch Binder events in the main loop
  brillo::BinderWatcher binder_watcher;
  CHECK(binder_watcher.Init()) << "Binder FD watcher init failed";
  return brillo::DBusDaemon::Run();
}

+4 −13
Original line number Diff line number Diff line
@@ -18,27 +18,18 @@

#include <binder/IServiceManager.h>
#include <binder/Status.h>
#include <brillo/binder_watcher.h>
#include <utils/Errors.h>

#include "metrics_collector_service_trampoline.h"
#include "metrics_collector.h"

using namespace android;

BnMetricsCollectorServiceImpl::BnMetricsCollectorServiceImpl(
    MetricsCollectorServiceTrampoline* metrics_collector_service_trampoline) {
  metrics_collector_service_trampoline_ = metrics_collector_service_trampoline;
}

void BnMetricsCollectorServiceImpl::Run() {
  status_t status =
      defaultServiceManager()->addService(getInterfaceDescriptor(), this);
  CHECK(status == OK) << "libmetricscollectorservice: failed to add service";
  binder_watcher_.reset(new ::brillo::BinderWatcher);
  CHECK(binder_watcher_->Init()) << "Binder FD watcher init failed";
    MetricsCollector* metrics_collector)
    : metrics_collector_(metrics_collector) {
}

android::binder::Status BnMetricsCollectorServiceImpl::notifyUserCrash() {
  metrics_collector_service_trampoline_->ProcessUserCrash();
  metrics_collector_->ProcessUserCrash();
  return android::binder::Status::ok();
}
+8 −22
Original line number Diff line number Diff line
@@ -18,45 +18,31 @@
#define METRICSD_METRICS_COLLECTOR_SERVICE_IMPL_H_

// metrics_collector binder service implementation.  Constructed by
// MetricsCollectorServiceTrampoline, which we use to call back into
// MetricsCollector.  The trampoline isolates us from the -frtti code of
// metrics_collector / libbrillo.
// MetricsCollector.

#include "android/brillo/metrics/BnMetricsCollectorService.h"

#include <memory>

#include <binder/Status.h>
#include <brillo/binder_watcher.h>

class MetricsCollectorServiceTrampoline;

//#include "metrics_collector_service_trampoline.h"
class MetricsCollector;

class BnMetricsCollectorServiceImpl
    : public android::brillo::metrics::BnMetricsCollectorService {
 public:
  // Passed a this pointer from the MetricsCollectorServiceTrampoline
  // object that constructs us.
  // Passed a this pointer from the MetricsCollector object that constructs us.
  explicit BnMetricsCollectorServiceImpl(
      MetricsCollectorServiceTrampoline* metrics_collector_service_trampoline);
      MetricsCollector* metrics_collector_service);

  virtual ~BnMetricsCollectorServiceImpl() = default;

  // Starts the binder main loop.
  void Run();

  // Called by crash_reporter to report a userspace crash event.  We relay
  // this to MetricsCollector using the trampoline.
  // this to MetricsCollector.
  android::binder::Status notifyUserCrash();

 private:
  // Trampoline object that constructs us, we use this to call MetricsCollector
  // methods via the trampoline.
  MetricsCollectorServiceTrampoline* metrics_collector_service_trampoline_;

  // BinderWatcher object we construct for handling Binder traffic
  std::unique_ptr<brillo::BinderWatcher> binder_watcher_;
  // MetricsCollector object that constructs us, we use this to call back
  // to it.
  MetricsCollector* metrics_collector_;
};

#endif  // METRICSD_METRICS_COLLECTOR_SERVICE_IMPL_H_
+0 −34
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "metrics_collector_service_trampoline.h"
#include "metrics_collector.h"
#include "metrics_collector_service_impl.h"

MetricsCollectorServiceTrampoline::MetricsCollectorServiceTrampoline(
    MetricsCollector* metrics_collector) {
  metrics_collector_ = metrics_collector;
}

void MetricsCollectorServiceTrampoline::Run() {
  // Start metricscollectorservice binder service
  metrics_collector_service.reset(new BnMetricsCollectorServiceImpl(this));
  metrics_collector_service->Run();
}

void MetricsCollectorServiceTrampoline::ProcessUserCrash() {
  metrics_collector_->ProcessUserCrash();
}
Loading