Merge changes Id186dc54,Ie8fee841

am: f2eafd21a6

* commit 'f2eafd21a66f4b97bde4b18328407bb53820516e':
  metricsd: Allows introspecting the metrics.
  metrics: Remove user action logic.
This commit is contained in:
Bertrand Simonnet 2015-12-04 21:23:03 +00:00 committed by android-build-merger
commit d093c4bb5e
9 changed files with 50 additions and 54 deletions

View file

@ -22,4 +22,5 @@ interface IMetricsd {
oneway void recordLinearHistogram(String name, int sample, int max);
oneway void recordSparseHistogram(String name, int sample);
oneway void recordCrash(String type);
String getHistogramsDump();
}

View file

@ -66,14 +66,6 @@ extern "C" int CMetricsLibrarySendSparseToUMA(CMetricsLibrary handle,
return lib->SendSparseToUMA(std::string(name), sample);
}
extern "C" int CMetricsLibrarySendUserActionToUMA(CMetricsLibrary handle,
const char* action) {
MetricsLibrary* lib = reinterpret_cast<MetricsLibrary*>(handle);
if (lib == NULL)
return 0;
return lib->SendUserActionToUMA(std::string(action));
}
extern "C" int CMetricsLibrarySendCrashToUMA(CMetricsLibrary handle,
const char* crash_kind) {
MetricsLibrary* lib = reinterpret_cast<MetricsLibrary*>(handle);

View file

@ -44,10 +44,6 @@ int CMetricsLibrarySendEnumToUMA(CMetricsLibrary handle,
int CMetricsLibrarySendSparseToUMA(CMetricsLibrary handle,
const char* name, int sample);
// C wrapper for MetricsLibrary::SendUserActionToUMA.
int CMetricsLibrarySendUserActionToUMA(CMetricsLibrary handle,
const char* action);
// C wrapper for MetricsLibrary::SendCrashToUMA.
int CMetricsLibrarySendCrashToUMA(CMetricsLibrary handle,
const char* crash_kind);

View file

@ -44,7 +44,6 @@ class MetricsLibraryInterface {
virtual bool SendEnumToUMA(const std::string& name, int sample, int max) = 0;
virtual bool SendBoolToUMA(const std::string& name, bool sample) = 0;
virtual bool SendSparseToUMA(const std::string& name, int sample) = 0;
virtual bool SendUserActionToUMA(const std::string& action) = 0;
virtual ~MetricsLibraryInterface() {}
};
@ -114,18 +113,6 @@ class MetricsLibrary : public MetricsLibraryInterface {
// |sample| is the 32-bit integer value to be recorded.
bool SendSparseToUMA(const std::string& name, int sample) override;
// Sends a user action to Chrome for transport to UMA and returns true on
// success. This method results in the equivalent of an asynchronous
// non-blocking RPC to UserMetrics::RecordAction. The new metric must be
// added to chrome/tools/extract_actions.py in the Chromium repository, which
// should then be run to generate a hash for the new action.
//
// Until http://crosbug.com/11125 is fixed, the metric must also be added to
// chrome/browser/chromeos/external_metrics.cc.
//
// |action| is the user-generated event (e.g., "MuteKeyPressed").
bool SendUserActionToUMA(const std::string& action) override;
// Sends a signal to UMA that a crash of the given |crash_kind|
// has occurred. Used by UMA to generate stability statistics.
bool SendCrashToUMA(const char *crash_kind);
@ -138,6 +125,11 @@ class MetricsLibrary : public MetricsLibraryInterface {
// number in the histograms dashboard).
bool SendCrosEventToUMA(const std::string& event);
// Debugging only.
// Dumps the histograms aggregated since metricsd started into |dump|.
// Returns true iff the dump succeeds.
bool GetHistogramsDump(std::string* dump);
private:
friend class CMetricsLibraryTest;
friend class MetricsLibraryTest;

View file

@ -34,7 +34,6 @@ class MetricsLibraryMock : public MetricsLibraryInterface {
int max));
MOCK_METHOD2(SendBoolToUMA, bool(const std::string& name, bool sample));
MOCK_METHOD2(SendSparseToUMA, bool(const std::string& name, int sample));
MOCK_METHOD1(SendUserActionToUMA, bool(const std::string& action));
bool AreMetricsEnabled() override {return metrics_enabled_;};
};

View file

@ -17,16 +17,14 @@
#include <cstdio>
#include <cstdlib>
#include <base/memory/scoped_vector.h>
#include "constants.h"
#include "metrics/metrics_library.h"
enum Mode {
kModeDumpHistograms,
kModeSendSample,
kModeSendEnumSample,
kModeSendSparseSample,
kModeSendUserAction,
kModeSendCrosEvent,
kModeHasConsent,
kModeIsGuestMode,
@ -38,18 +36,17 @@ void ShowUsage() {
" metrics_client -e name sample max\n"
" metrics_client -s name sample\n"
" metrics_client -v event\n"
" metrics_client -u action\n"
" metrics_client [-cdg]\n"
"\n"
" default: send metric with integer values \n"
" |min| > 0, |min| <= sample < |max|\n"
" -c: return exit status 0 if user consents to stats, 1 otherwise,\n"
" in guest mode always return 1\n"
" -d: dump the histograms recorded by metricsd to stdout\n"
" -e: send linear/enumeration histogram data\n"
" -g: return exit status 0 if machine in guest mode, 1 otherwise\n"
" -s: send a sparse histogram sample\n"
" -t: convert sample from double seconds to int milliseconds\n"
" -u: send a user action to Chrome\n"
" -v: send a Platform.CrOSEvent enum histogram sample\n");
exit(1);
}
@ -74,6 +71,20 @@ static double ParseDouble(const char *arg) {
return value;
}
static int DumpHistograms() {
MetricsLibrary metrics_lib;
metrics_lib.Init();
std::string dump;
if (!metrics_lib.GetHistogramsDump(&dump)) {
printf("Failed to dump the histograms.");
return 1;
}
printf("%s\n", dump.c_str());
return 0;
}
static int SendStats(char* argv[],
int name_index,
enum Mode mode,
@ -102,14 +113,6 @@ static int SendStats(char* argv[],
return 0;
}
static int SendUserAction(char* argv[], int action_index) {
const char* action = argv[action_index];
MetricsLibrary metrics_lib;
metrics_lib.Init();
metrics_lib.SendUserActionToUMA(action);
return 0;
}
static int SendCrosEvent(char* argv[], int action_index) {
const char* event = argv[action_index];
bool result;
@ -141,11 +144,14 @@ int main(int argc, char** argv) {
// Parse arguments
int flag;
while ((flag = getopt(argc, argv, "abcegstuv")) != -1) {
while ((flag = getopt(argc, argv, "abcdegstv")) != -1) {
switch (flag) {
case 'c':
mode = kModeHasConsent;
break;
case 'd':
mode = kModeDumpHistograms;
break;
case 'e':
mode = kModeSendEnumSample;
break;
@ -158,9 +164,6 @@ int main(int argc, char** argv) {
case 't':
secs_to_msecs = true;
break;
case 'u':
mode = kModeSendUserAction;
break;
case 'v':
mode = kModeSendCrosEvent;
break;
@ -178,8 +181,6 @@ int main(int argc, char** argv) {
expected_args = 3;
else if (mode == kModeSendSparseSample)
expected_args = 2;
else if (mode == kModeSendUserAction)
expected_args = 1;
else if (mode == kModeSendCrosEvent)
expected_args = 1;
@ -188,6 +189,8 @@ int main(int argc, char** argv) {
}
switch (mode) {
case kModeDumpHistograms:
return DumpHistograms();
case kModeSendSample:
case kModeSendEnumSample:
case kModeSendSparseSample:
@ -198,8 +201,6 @@ int main(int argc, char** argv) {
arg_index,
mode,
secs_to_msecs);
case kModeSendUserAction:
return SendUserAction(argv, arg_index);
case kModeSendCrosEvent:
return SendCrosEvent(argv, arg_index);
case kModeHasConsent:

View file

@ -200,13 +200,6 @@ bool MetricsLibrary::SendSparseToUMA(const std::string& name, int sample) {
.isOk();
}
bool MetricsLibrary::SendUserActionToUMA(const std::string& action) {
// Deprecated.
// TODO(bsimonnet): Delete this method entirely once all the callers are
// removed (b/25818567).
return true;
}
bool MetricsLibrary::SendCrashToUMA(const char* crash_kind) {
return CheckService() &&
metricsd_proxy_->recordCrash(String16(crash_kind)).isOk();
@ -220,3 +213,14 @@ bool MetricsLibrary::SendCrosEventToUMA(const std::string& event) {
}
return false;
}
bool MetricsLibrary::GetHistogramsDump(std::string* dump) {
android::String16 temp_dump;
if (!CheckService() ||
!metricsd_proxy_->getHistogramsDump(&temp_dump).isOk()) {
return false;
}
*dump = android::String8(temp_dump).string();
return true;
}

View file

@ -18,6 +18,7 @@
#include <base/metrics/histogram.h>
#include <base/metrics/sparse_histogram.h>
#include <base/metrics/statistics_recorder.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
#include <utils/String16.h>
@ -96,3 +97,10 @@ Status BnMetricsdImpl::recordCrash(const String16& type) {
}
return Status::ok();
}
Status BnMetricsdImpl::getHistogramsDump(String16* dump) {
std::string str_dump;
base::StatisticsRecorder::WriteGraph(std::string(), &str_dump);
*dump = String16(str_dump.c_str());
return Status::ok();
}

View file

@ -47,6 +47,9 @@ class BnMetricsdImpl : public android::brillo::metrics::BnMetricsd {
// Records a crash.
android::binder::Status recordCrash(const android::String16& type) override;
// Returns a dump of the histograms aggregated in memory.
android::binder::Status getHistogramsDump(android::String16* dump) override;
private:
std::shared_ptr<CrashCounters> counters_;
};