Merge changes Id186dc54,Ie8fee841
am: f2eafd21a6
* commit 'f2eafd21a66f4b97bde4b18328407bb53820516e':
metricsd: Allows introspecting the metrics.
metrics: Remove user action logic.
This commit is contained in:
commit
d093c4bb5e
9 changed files with 50 additions and 54 deletions
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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_;};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue