Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(976)

Unified Diff: chrome/browser/metrics/metrics_log_unittest.cc

Issue 10224010: [UMA] Add performance profile data to UMA uploads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix up 64-bit constants Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/metrics/metrics_log.cc ('k') | chrome/browser/metrics/metrics_service.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/metrics/metrics_log_unittest.cc
diff --git a/chrome/browser/metrics/metrics_log_unittest.cc b/chrome/browser/metrics/metrics_log_unittest.cc
index 03654653866fd64b39543f19b96d2c69d2d0d049..7d8be39c0db63035df35d9a49fdcf20ee4d97a3c 100644
--- a/chrome/browser/metrics/metrics_log_unittest.cc
+++ b/chrome/browser/metrics/metrics_log_unittest.cc
@@ -5,12 +5,15 @@
#include <string>
#include "base/basictypes.h"
+#include "base/port.h"
#include "base/stringprintf.h"
#include "base/string_util.h"
#include "base/time.h"
+#include "base/tracked_objects.h"
#include "chrome/browser/metrics/metrics_log.h"
#include "chrome/browser/prefs/browser_prefs.h"
#include "chrome/browser/prefs/pref_service.h"
+#include "chrome/common/metrics/proto/profiler_event.pb.h"
#include "chrome/common/metrics/proto/system_profile.pb.h"
#include "chrome/common/pref_names.h"
#include "chrome/test/base/testing_pref_service.h"
@@ -20,6 +23,9 @@
#include "webkit/plugins/webplugininfo.h"
using base::TimeDelta;
+using metrics::ProfilerEventProto;
+using tracked_objects::ProcessDataSnapshot;
+using tracked_objects::TaskSnapshot;
namespace {
@@ -53,8 +59,12 @@ class TestMetricsLog : public MetricsLog {
return &prefs_;
}
+ const metrics::ChromeUserMetricsExtension& uma_proto() const {
+ return *MetricsLog::uma_proto();
+ }
+
const metrics::SystemProfileProto& system_profile() const {
- return uma_proto()->system_profile();
+ return uma_proto().system_profile();
}
private:
@@ -120,6 +130,137 @@ TEST_F(MetricsLogTest, RecordEnvironment) {
TestRecordEnvironment(true);
}
+// Test that we properly write profiler data to the log.
+TEST_F(MetricsLogTest, RecordProfilerData) {
+ TestMetricsLog log(kClientId, kSessionId);
+ EXPECT_EQ(0, log.uma_proto().profiler_event_size());
+
+ {
+ ProcessDataSnapshot process_data;
+ process_data.process_id = 177;
+ process_data.tasks.push_back(TaskSnapshot());
+ process_data.tasks.back().birth.location.file_name = "file";
+ process_data.tasks.back().birth.location.function_name = "function";
+ process_data.tasks.back().birth.location.line_number = 1337;
+ process_data.tasks.back().birth.thread_name = "birth_thread";
+ process_data.tasks.back().death_data.count = 37;
+ process_data.tasks.back().death_data.run_duration_sum = 31;
+ process_data.tasks.back().death_data.run_duration_max = 17;
+ process_data.tasks.back().death_data.run_duration_sample = 13;
+ process_data.tasks.back().death_data.queue_duration_sum = 8;
+ process_data.tasks.back().death_data.queue_duration_max = 5;
+ process_data.tasks.back().death_data.queue_duration_sample = 3;
+ process_data.tasks.back().death_thread_name = "Still_Alive";
+ process_data.tasks.push_back(TaskSnapshot());
+ process_data.tasks.back().birth.location.file_name = "file2";
+ process_data.tasks.back().birth.location.function_name = "function2";
+ process_data.tasks.back().birth.location.line_number = 1773;
+ process_data.tasks.back().birth.thread_name = "birth_thread2";
+ process_data.tasks.back().death_data.count = 19;
+ process_data.tasks.back().death_data.run_duration_sum = 23;
+ process_data.tasks.back().death_data.run_duration_max = 11;
+ process_data.tasks.back().death_data.run_duration_sample = 7;
+ process_data.tasks.back().death_data.queue_duration_sum = 0;
+ process_data.tasks.back().death_data.queue_duration_max = 0;
+ process_data.tasks.back().death_data.queue_duration_sample = 0;
+ process_data.tasks.back().death_thread_name = "death_thread";
+
+ log.RecordProfilerData(process_data, content::PROCESS_TYPE_BROWSER);
+ ASSERT_EQ(1, log.uma_proto().profiler_event_size());
+ EXPECT_EQ(ProfilerEventProto::STARTUP_PROFILE,
+ log.uma_proto().profiler_event(0).profile_type());
+ EXPECT_EQ(ProfilerEventProto::WALL_CLOCK_TIME,
+ log.uma_proto().profiler_event(0).time_source());
+
+ ASSERT_EQ(2, log.uma_proto().profiler_event(0).tracked_object_size());
+
+ const ProfilerEventProto::TrackedObject* tracked_object =
+ &log.uma_proto().profiler_event(0).tracked_object(0);
+ EXPECT_EQ(GG_UINT64_C(13962325592283560029),
+ tracked_object->source_file_name_hash());
+ EXPECT_EQ(GG_UINT64_C(10123486280357988687),
+ tracked_object->source_function_name_hash());
+ EXPECT_EQ(1337, tracked_object->source_line_number());
+ EXPECT_EQ(GG_UINT64_C(3400908935414830400),
+ tracked_object->birth_thread_name_hash());
+ EXPECT_EQ(37, tracked_object->exec_count());
+ EXPECT_EQ(31, tracked_object->exec_time_total());
+ EXPECT_EQ(13, tracked_object->exec_time_sampled());
+ EXPECT_EQ(8, tracked_object->queue_time_total());
+ EXPECT_EQ(3, tracked_object->queue_time_sampled());
+ EXPECT_EQ(GG_UINT64_C(10151977472163283085),
+ tracked_object->exec_thread_name_hash());
+ EXPECT_EQ(177U, tracked_object->process_id());
+ EXPECT_EQ(ProfilerEventProto::TrackedObject::BROWSER,
+ tracked_object->process_type());
+
+ tracked_object = &log.uma_proto().profiler_event(0).tracked_object(1);
+ EXPECT_EQ(GG_UINT64_C(55232426147951219),
+ tracked_object->source_file_name_hash());
+ EXPECT_EQ(GG_UINT64_C(2025659946535236365),
+ tracked_object->source_function_name_hash());
+ EXPECT_EQ(1773, tracked_object->source_line_number());
+ EXPECT_EQ(GG_UINT64_C(15727396632046120663),
+ tracked_object->birth_thread_name_hash());
+ EXPECT_EQ(19, tracked_object->exec_count());
+ EXPECT_EQ(23, tracked_object->exec_time_total());
+ EXPECT_EQ(7, tracked_object->exec_time_sampled());
+ EXPECT_EQ(0, tracked_object->queue_time_total());
+ EXPECT_EQ(0, tracked_object->queue_time_sampled());
+ EXPECT_EQ(GG_UINT64_C(14275151213201158253),
+ tracked_object->exec_thread_name_hash());
+ EXPECT_EQ(177U, tracked_object->process_id());
+ EXPECT_EQ(ProfilerEventProto::TrackedObject::BROWSER,
+ tracked_object->process_type());
+ }
+
+ {
+ ProcessDataSnapshot process_data;
+ process_data.process_id = 1177;
+ process_data.tasks.push_back(TaskSnapshot());
+ process_data.tasks.back().birth.location.file_name = "file3";
+ process_data.tasks.back().birth.location.function_name = "function3";
+ process_data.tasks.back().birth.location.line_number = 7331;
+ process_data.tasks.back().birth.thread_name = "birth_thread3";
+ process_data.tasks.back().death_data.count = 137;
+ process_data.tasks.back().death_data.run_duration_sum = 131;
+ process_data.tasks.back().death_data.run_duration_max = 117;
+ process_data.tasks.back().death_data.run_duration_sample = 113;
+ process_data.tasks.back().death_data.queue_duration_sum = 108;
+ process_data.tasks.back().death_data.queue_duration_max = 105;
+ process_data.tasks.back().death_data.queue_duration_sample = 103;
+ process_data.tasks.back().death_thread_name = "death_thread3";
+
+ log.RecordProfilerData(process_data, content::PROCESS_TYPE_RENDERER);
+ ASSERT_EQ(1, log.uma_proto().profiler_event_size());
+ EXPECT_EQ(ProfilerEventProto::STARTUP_PROFILE,
+ log.uma_proto().profiler_event(0).profile_type());
+ EXPECT_EQ(ProfilerEventProto::WALL_CLOCK_TIME,
+ log.uma_proto().profiler_event(0).time_source());
+ ASSERT_EQ(3, log.uma_proto().profiler_event(0).tracked_object_size());
+
+ const ProfilerEventProto::TrackedObject* tracked_object =
+ &log.uma_proto().profiler_event(0).tracked_object(2);
+ EXPECT_EQ(GG_UINT64_C(5081672290546182009),
+ tracked_object->source_file_name_hash());
+ EXPECT_EQ(GG_UINT64_C(2686523203278102732),
+ tracked_object->source_function_name_hash());
+ EXPECT_EQ(7331, tracked_object->source_line_number());
+ EXPECT_EQ(GG_UINT64_C(8768512930949373716),
+ tracked_object->birth_thread_name_hash());
+ EXPECT_EQ(137, tracked_object->exec_count());
+ EXPECT_EQ(131, tracked_object->exec_time_total());
+ EXPECT_EQ(113, tracked_object->exec_time_sampled());
+ EXPECT_EQ(108, tracked_object->queue_time_total());
+ EXPECT_EQ(103, tracked_object->queue_time_sampled());
+ EXPECT_EQ(GG_UINT64_C(7246674144371406371),
+ tracked_object->exec_thread_name_hash());
+ EXPECT_EQ(1177U, tracked_object->process_id());
+ EXPECT_EQ(ProfilerEventProto::TrackedObject::RENDERER,
+ tracked_object->process_type());
+ }
+}
+
#if defined(OS_CHROMEOS)
TEST_F(MetricsLogTest, ChromeOSStabilityData) {
TestMetricsLog log(kClientId, kSessionId);
« no previous file with comments | « chrome/browser/metrics/metrics_log.cc ('k') | chrome/browser/metrics/metrics_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698