OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/metrics/metrics_log.h" | 5 #include "chrome/browser/metrics/metrics_log.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/port.h" | 12 #include "base/port.h" |
13 #include "base/prefs/pref_service.h" | 13 #include "base/prefs/pref_service.h" |
14 #include "base/prefs/testing_pref_service.h" | 14 #include "base/prefs/testing_pref_service.h" |
15 #include "base/strings/string_number_conversions.h" | 15 #include "base/strings/string_number_conversions.h" |
16 #include "base/strings/string_util.h" | 16 #include "base/strings/string_util.h" |
17 #include "base/strings/stringprintf.h" | 17 #include "base/strings/stringprintf.h" |
18 #include "base/threading/sequenced_worker_pool.h" | 18 #include "base/threading/sequenced_worker_pool.h" |
19 #include "base/time/time.h" | 19 #include "base/time/time.h" |
20 #include "base/tracked_objects.h" | 20 #include "base/tracked_objects.h" |
21 #include "chrome/browser/google/google_util.h" | 21 #include "chrome/browser/google/google_util.h" |
| 22 #include "chrome/browser/metrics/metrics_service.h" |
22 #include "chrome/browser/prefs/browser_prefs.h" | 23 #include "chrome/browser/prefs/browser_prefs.h" |
23 #include "chrome/common/chrome_version_info.h" | 24 #include "chrome/common/chrome_version_info.h" |
24 #include "chrome/common/pref_names.h" | 25 #include "chrome/common/pref_names.h" |
25 #include "components/metrics/metrics_hashes.h" | 26 #include "components/metrics/metrics_hashes.h" |
26 #include "components/metrics/metrics_provider.h" | 27 #include "components/metrics/metrics_provider.h" |
27 #include "components/metrics/proto/profiler_event.pb.h" | 28 #include "components/metrics/proto/profiler_event.pb.h" |
28 #include "components/metrics/proto/system_profile.pb.h" | 29 #include "components/metrics/proto/system_profile.pb.h" |
29 #include "components/metrics/test_metrics_service_client.h" | 30 #include "components/metrics/test_metrics_service_client.h" |
30 #include "components/variations/active_field_trials.h" | 31 #include "components/variations/active_field_trials.h" |
31 #include "content/public/browser/browser_thread.h" | 32 #include "content/public/browser/browser_thread.h" |
(...skipping 24 matching lines...) Expand all Loading... |
56 const variations::ActiveGroupId kSyntheticTrials[] = { | 57 const variations::ActiveGroupId kSyntheticTrials[] = { |
57 {55, 15}, | 58 {55, 15}, |
58 {66, 16} | 59 {66, 16} |
59 }; | 60 }; |
60 | 61 |
61 class TestMetricsLog : public MetricsLog { | 62 class TestMetricsLog : public MetricsLog { |
62 public: | 63 public: |
63 TestMetricsLog(const std::string& client_id, | 64 TestMetricsLog(const std::string& client_id, |
64 int session_id, | 65 int session_id, |
65 LogType log_type, | 66 LogType log_type, |
66 metrics::MetricsServiceClient* client) | |
67 : MetricsLog(client_id, session_id, log_type, client), | |
68 prefs_(&scoped_prefs_) { | |
69 chrome::RegisterLocalState(scoped_prefs_.registry()); | |
70 InitPrefs(); | |
71 } | |
72 | |
73 // Creates a TestMetricsLog that will use |prefs| as the fake local state. | |
74 // Useful for tests that need to re-use the local state prefs between logs. | |
75 TestMetricsLog(const std::string& client_id, | |
76 int session_id, | |
77 LogType log_type, | |
78 metrics::MetricsServiceClient* client, | 67 metrics::MetricsServiceClient* client, |
79 TestingPrefServiceSimple* prefs) | 68 TestingPrefServiceSimple* prefs) |
80 : MetricsLog(client_id, session_id, log_type, client), prefs_(prefs) { | 69 : MetricsLog(client_id, session_id, log_type, client, prefs), |
| 70 prefs_(prefs) { |
81 InitPrefs(); | 71 InitPrefs(); |
82 } | 72 } |
83 | 73 |
84 virtual ~TestMetricsLog() {} | 74 virtual ~TestMetricsLog() {} |
85 | 75 |
86 virtual PrefService* GetPrefService() OVERRIDE { | |
87 return prefs_; | |
88 } | |
89 | |
90 const metrics::ChromeUserMetricsExtension& uma_proto() const { | 76 const metrics::ChromeUserMetricsExtension& uma_proto() const { |
91 return *MetricsLog::uma_proto(); | 77 return *MetricsLog::uma_proto(); |
92 } | 78 } |
93 | 79 |
94 const metrics::SystemProfileProto& system_profile() const { | 80 const metrics::SystemProfileProto& system_profile() const { |
95 return uma_proto().system_profile(); | 81 return uma_proto().system_profile(); |
96 } | 82 } |
97 | 83 |
98 private: | 84 private: |
99 void InitPrefs() { | 85 void InitPrefs() { |
100 prefs_->SetInt64(prefs::kInstallDate, kInstallDate); | 86 prefs_->SetInt64(prefs::kInstallDate, kInstallDate); |
101 prefs_->SetString(prefs::kMetricsReportingEnabledTimestamp, | 87 prefs_->SetString(prefs::kMetricsReportingEnabledTimestamp, |
102 base::Int64ToString(kEnabledDate)); | 88 base::Int64ToString(kEnabledDate)); |
103 } | 89 } |
104 | 90 |
105 virtual void GetFieldTrialIds( | 91 virtual void GetFieldTrialIds( |
106 std::vector<variations::ActiveGroupId>* field_trial_ids) const | 92 std::vector<variations::ActiveGroupId>* field_trial_ids) const |
107 OVERRIDE { | 93 OVERRIDE { |
108 ASSERT_TRUE(field_trial_ids->empty()); | 94 ASSERT_TRUE(field_trial_ids->empty()); |
109 | 95 |
110 for (size_t i = 0; i < arraysize(kFieldTrialIds); ++i) { | 96 for (size_t i = 0; i < arraysize(kFieldTrialIds); ++i) { |
111 field_trial_ids->push_back(kFieldTrialIds[i]); | 97 field_trial_ids->push_back(kFieldTrialIds[i]); |
112 } | 98 } |
113 } | 99 } |
114 | 100 |
115 // Scoped PrefsService, which may not be used if |prefs_ != &scoped_prefs|. | |
116 TestingPrefServiceSimple scoped_prefs_; | |
117 // Weak pointer to the PrefsService used by this log. | 101 // Weak pointer to the PrefsService used by this log. |
118 TestingPrefServiceSimple* prefs_; | 102 TestingPrefServiceSimple* prefs_; |
119 | 103 |
120 DISALLOW_COPY_AND_ASSIGN(TestMetricsLog); | 104 DISALLOW_COPY_AND_ASSIGN(TestMetricsLog); |
121 }; | 105 }; |
122 | 106 |
123 } // namespace | 107 } // namespace |
124 | 108 |
125 class MetricsLogTest : public testing::Test { | 109 class MetricsLogTest : public testing::Test { |
126 public: | 110 public: |
127 MetricsLogTest() {} | 111 MetricsLogTest() { MetricsService::RegisterPrefs(prefs_.registry()); } |
128 | 112 |
129 protected: | 113 protected: |
130 // Check that the values in |system_values| correspond to the test data | 114 // Check that the values in |system_values| correspond to the test data |
131 // defined at the top of this file. | 115 // defined at the top of this file. |
132 void CheckSystemProfile(const metrics::SystemProfileProto& system_profile) { | 116 void CheckSystemProfile(const metrics::SystemProfileProto& system_profile) { |
133 EXPECT_EQ(kInstallDateExpected, system_profile.install_date()); | 117 EXPECT_EQ(kInstallDateExpected, system_profile.install_date()); |
134 EXPECT_EQ(kEnabledDateExpected, system_profile.uma_enabled_date()); | 118 EXPECT_EQ(kEnabledDateExpected, system_profile.uma_enabled_date()); |
135 | 119 |
136 ASSERT_EQ(arraysize(kFieldTrialIds) + arraysize(kSyntheticTrials), | 120 ASSERT_EQ(arraysize(kFieldTrialIds) + arraysize(kSyntheticTrials), |
137 static_cast<size_t>(system_profile.field_trial_size())); | 121 static_cast<size_t>(system_profile.field_trial_size())); |
(...skipping 18 matching lines...) Expand all Loading... |
156 system_profile.hardware(); | 140 system_profile.hardware(); |
157 | 141 |
158 EXPECT_TRUE(hardware.has_cpu()); | 142 EXPECT_TRUE(hardware.has_cpu()); |
159 EXPECT_TRUE(hardware.cpu().has_vendor_name()); | 143 EXPECT_TRUE(hardware.cpu().has_vendor_name()); |
160 EXPECT_TRUE(hardware.cpu().has_signature()); | 144 EXPECT_TRUE(hardware.cpu().has_signature()); |
161 | 145 |
162 // TODO(isherman): Verify other data written into the protobuf as a result | 146 // TODO(isherman): Verify other data written into the protobuf as a result |
163 // of this call. | 147 // of this call. |
164 } | 148 } |
165 | 149 |
| 150 protected: |
| 151 TestingPrefServiceSimple prefs_; |
| 152 |
166 private: | 153 private: |
167 content::TestBrowserThreadBundle thread_bundle_; | 154 content::TestBrowserThreadBundle thread_bundle_; |
168 | 155 |
169 DISALLOW_COPY_AND_ASSIGN(MetricsLogTest); | 156 DISALLOW_COPY_AND_ASSIGN(MetricsLogTest); |
170 }; | 157 }; |
171 | 158 |
172 TEST_F(MetricsLogTest, RecordEnvironment) { | 159 TEST_F(MetricsLogTest, RecordEnvironment) { |
173 metrics::TestMetricsServiceClient client; | 160 metrics::TestMetricsServiceClient client; |
174 TestMetricsLog log(kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client); | 161 TestMetricsLog log( |
| 162 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
175 | 163 |
176 std::vector<variations::ActiveGroupId> synthetic_trials; | 164 std::vector<variations::ActiveGroupId> synthetic_trials; |
177 // Add two synthetic trials. | 165 // Add two synthetic trials. |
178 synthetic_trials.push_back(kSyntheticTrials[0]); | 166 synthetic_trials.push_back(kSyntheticTrials[0]); |
179 synthetic_trials.push_back(kSyntheticTrials[1]); | 167 synthetic_trials.push_back(kSyntheticTrials[1]); |
180 | 168 |
181 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), | 169 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), |
182 synthetic_trials); | 170 synthetic_trials); |
183 // Check that the system profile on the log has the correct values set. | 171 // Check that the system profile on the log has the correct values set. |
184 CheckSystemProfile(log.system_profile()); | 172 CheckSystemProfile(log.system_profile()); |
185 | 173 |
186 // Check that the system profile has also been written to prefs. | 174 // Check that the system profile has also been written to prefs. |
187 PrefService* local_state = log.GetPrefService(); | |
188 const std::string base64_system_profile = | 175 const std::string base64_system_profile = |
189 local_state->GetString(prefs::kStabilitySavedSystemProfile); | 176 prefs_.GetString(prefs::kStabilitySavedSystemProfile); |
190 EXPECT_FALSE(base64_system_profile.empty()); | 177 EXPECT_FALSE(base64_system_profile.empty()); |
191 std::string serialied_system_profile; | 178 std::string serialied_system_profile; |
192 EXPECT_TRUE(base::Base64Decode(base64_system_profile, | 179 EXPECT_TRUE(base::Base64Decode(base64_system_profile, |
193 &serialied_system_profile)); | 180 &serialied_system_profile)); |
194 metrics::SystemProfileProto decoded_system_profile; | 181 metrics::SystemProfileProto decoded_system_profile; |
195 EXPECT_TRUE(decoded_system_profile.ParseFromString(serialied_system_profile)); | 182 EXPECT_TRUE(decoded_system_profile.ParseFromString(serialied_system_profile)); |
196 CheckSystemProfile(decoded_system_profile); | 183 CheckSystemProfile(decoded_system_profile); |
197 } | 184 } |
198 | 185 |
199 TEST_F(MetricsLogTest, LoadSavedEnvironmentFromPrefs) { | 186 TEST_F(MetricsLogTest, LoadSavedEnvironmentFromPrefs) { |
200 const char* kSystemProfilePref = prefs::kStabilitySavedSystemProfile; | 187 const char* kSystemProfilePref = prefs::kStabilitySavedSystemProfile; |
201 const char* kSystemProfileHashPref = prefs::kStabilitySavedSystemProfileHash; | 188 const char* kSystemProfileHashPref = prefs::kStabilitySavedSystemProfileHash; |
202 | 189 |
203 metrics::TestMetricsServiceClient client; | 190 metrics::TestMetricsServiceClient client; |
204 TestingPrefServiceSimple prefs; | |
205 chrome::RegisterLocalState(prefs.registry()); | |
206 | 191 |
207 // The pref value is empty, so loading it from prefs should fail. | 192 // The pref value is empty, so loading it from prefs should fail. |
208 { | 193 { |
209 TestMetricsLog log( | 194 TestMetricsLog log( |
210 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs); | 195 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
211 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); | 196 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); |
212 } | 197 } |
213 | 198 |
214 // Do a RecordEnvironment() call and check whether the pref is recorded. | 199 // Do a RecordEnvironment() call and check whether the pref is recorded. |
215 { | 200 { |
216 TestMetricsLog log( | 201 TestMetricsLog log( |
217 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs); | 202 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
218 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), | 203 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), |
219 std::vector<variations::ActiveGroupId>()); | 204 std::vector<variations::ActiveGroupId>()); |
220 EXPECT_FALSE(prefs.GetString(kSystemProfilePref).empty()); | 205 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); |
221 EXPECT_FALSE(prefs.GetString(kSystemProfileHashPref).empty()); | 206 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); |
222 } | 207 } |
223 | 208 |
224 { | 209 { |
225 TestMetricsLog log( | 210 TestMetricsLog log( |
226 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs); | 211 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
227 EXPECT_TRUE(log.LoadSavedEnvironmentFromPrefs()); | 212 EXPECT_TRUE(log.LoadSavedEnvironmentFromPrefs()); |
228 // Check some values in the system profile. | 213 // Check some values in the system profile. |
229 EXPECT_EQ(kInstallDateExpected, log.system_profile().install_date()); | 214 EXPECT_EQ(kInstallDateExpected, log.system_profile().install_date()); |
230 EXPECT_EQ(kEnabledDateExpected, log.system_profile().uma_enabled_date()); | 215 EXPECT_EQ(kEnabledDateExpected, log.system_profile().uma_enabled_date()); |
231 // Ensure that the call cleared the prefs. | 216 // Ensure that the call cleared the prefs. |
232 EXPECT_TRUE(prefs.GetString(kSystemProfilePref).empty()); | 217 EXPECT_TRUE(prefs_.GetString(kSystemProfilePref).empty()); |
233 EXPECT_TRUE(prefs.GetString(kSystemProfileHashPref).empty()); | 218 EXPECT_TRUE(prefs_.GetString(kSystemProfileHashPref).empty()); |
234 } | 219 } |
235 | 220 |
236 // Ensure that a non-matching hash results in the pref being invalid. | 221 // Ensure that a non-matching hash results in the pref being invalid. |
237 { | 222 { |
238 TestMetricsLog log( | 223 TestMetricsLog log( |
239 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs); | 224 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
240 // Call RecordEnvironment() to record the pref again. | 225 // Call RecordEnvironment() to record the pref again. |
241 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), | 226 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), |
242 std::vector<variations::ActiveGroupId>()); | 227 std::vector<variations::ActiveGroupId>()); |
243 } | 228 } |
244 | 229 |
245 { | 230 { |
246 // Set the hash to a bad value. | 231 // Set the hash to a bad value. |
247 prefs.SetString(kSystemProfileHashPref, "deadbeef"); | 232 prefs_.SetString(kSystemProfileHashPref, "deadbeef"); |
248 TestMetricsLog log( | 233 TestMetricsLog log( |
249 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs); | 234 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
250 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); | 235 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); |
251 // Ensure that the prefs are cleared, even if the call failed. | 236 // Ensure that the prefs are cleared, even if the call failed. |
252 EXPECT_TRUE(prefs.GetString(kSystemProfilePref).empty()); | 237 EXPECT_TRUE(prefs_.GetString(kSystemProfilePref).empty()); |
253 EXPECT_TRUE(prefs.GetString(kSystemProfileHashPref).empty()); | 238 EXPECT_TRUE(prefs_.GetString(kSystemProfileHashPref).empty()); |
254 } | 239 } |
255 } | 240 } |
256 | 241 |
257 TEST_F(MetricsLogTest, InitialLogStabilityMetrics) { | 242 TEST_F(MetricsLogTest, InitialLogStabilityMetrics) { |
258 metrics::TestMetricsServiceClient client; | 243 metrics::TestMetricsServiceClient client; |
259 TestMetricsLog log( | 244 TestMetricsLog log(kClientId, |
260 kClientId, kSessionId, MetricsLog::INITIAL_STABILITY_LOG, &client); | 245 kSessionId, |
| 246 MetricsLog::INITIAL_STABILITY_LOG, |
| 247 &client, |
| 248 &prefs_); |
261 std::vector<metrics::MetricsProvider*> metrics_providers; | 249 std::vector<metrics::MetricsProvider*> metrics_providers; |
262 log.RecordEnvironment(metrics_providers, | 250 log.RecordEnvironment(metrics_providers, |
263 std::vector<variations::ActiveGroupId>()); | 251 std::vector<variations::ActiveGroupId>()); |
264 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), | 252 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), |
265 base::TimeDelta()); | 253 base::TimeDelta()); |
266 const metrics::SystemProfileProto_Stability& stability = | 254 const metrics::SystemProfileProto_Stability& stability = |
267 log.system_profile().stability(); | 255 log.system_profile().stability(); |
268 // Required metrics: | 256 // Required metrics: |
269 EXPECT_TRUE(stability.has_launch_count()); | 257 EXPECT_TRUE(stability.has_launch_count()); |
270 EXPECT_TRUE(stability.has_crash_count()); | 258 EXPECT_TRUE(stability.has_crash_count()); |
271 // Initial log metrics: | 259 // Initial log metrics: |
272 EXPECT_TRUE(stability.has_incomplete_shutdown_count()); | 260 EXPECT_TRUE(stability.has_incomplete_shutdown_count()); |
273 EXPECT_TRUE(stability.has_breakpad_registration_success_count()); | 261 EXPECT_TRUE(stability.has_breakpad_registration_success_count()); |
274 EXPECT_TRUE(stability.has_breakpad_registration_failure_count()); | 262 EXPECT_TRUE(stability.has_breakpad_registration_failure_count()); |
275 EXPECT_TRUE(stability.has_debugger_present_count()); | 263 EXPECT_TRUE(stability.has_debugger_present_count()); |
276 EXPECT_TRUE(stability.has_debugger_not_present_count()); | 264 EXPECT_TRUE(stability.has_debugger_not_present_count()); |
277 } | 265 } |
278 | 266 |
279 TEST_F(MetricsLogTest, OngoingLogStabilityMetrics) { | 267 TEST_F(MetricsLogTest, OngoingLogStabilityMetrics) { |
280 metrics::TestMetricsServiceClient client; | 268 metrics::TestMetricsServiceClient client; |
281 TestMetricsLog log(kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client); | 269 TestMetricsLog log( |
| 270 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
282 std::vector<metrics::MetricsProvider*> metrics_providers; | 271 std::vector<metrics::MetricsProvider*> metrics_providers; |
283 log.RecordEnvironment(metrics_providers, | 272 log.RecordEnvironment(metrics_providers, |
284 std::vector<variations::ActiveGroupId>()); | 273 std::vector<variations::ActiveGroupId>()); |
285 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), | 274 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), |
286 base::TimeDelta()); | 275 base::TimeDelta()); |
287 const metrics::SystemProfileProto_Stability& stability = | 276 const metrics::SystemProfileProto_Stability& stability = |
288 log.system_profile().stability(); | 277 log.system_profile().stability(); |
289 // Required metrics: | 278 // Required metrics: |
290 EXPECT_TRUE(stability.has_launch_count()); | 279 EXPECT_TRUE(stability.has_launch_count()); |
291 EXPECT_TRUE(stability.has_crash_count()); | 280 EXPECT_TRUE(stability.has_crash_count()); |
292 // Initial log metrics: | 281 // Initial log metrics: |
293 EXPECT_FALSE(stability.has_incomplete_shutdown_count()); | 282 EXPECT_FALSE(stability.has_incomplete_shutdown_count()); |
294 EXPECT_FALSE(stability.has_breakpad_registration_success_count()); | 283 EXPECT_FALSE(stability.has_breakpad_registration_success_count()); |
295 EXPECT_FALSE(stability.has_breakpad_registration_failure_count()); | 284 EXPECT_FALSE(stability.has_breakpad_registration_failure_count()); |
296 EXPECT_FALSE(stability.has_debugger_present_count()); | 285 EXPECT_FALSE(stability.has_debugger_present_count()); |
297 EXPECT_FALSE(stability.has_debugger_not_present_count()); | 286 EXPECT_FALSE(stability.has_debugger_not_present_count()); |
298 } | 287 } |
299 | 288 |
300 // Test that we properly write profiler data to the log. | 289 // Test that we properly write profiler data to the log. |
301 TEST_F(MetricsLogTest, RecordProfilerData) { | 290 TEST_F(MetricsLogTest, RecordProfilerData) { |
302 // WARNING: If you broke the below check, you've modified how | 291 // WARNING: If you broke the below check, you've modified how |
303 // metrics::HashMetricName works. Please also modify all server-side code that | 292 // metrics::HashMetricName works. Please also modify all server-side code that |
304 // relies on the existing way of hashing. | 293 // relies on the existing way of hashing. |
305 EXPECT_EQ(GG_UINT64_C(1518842999910132863), | 294 EXPECT_EQ(GG_UINT64_C(1518842999910132863), |
306 metrics::HashMetricName("birth_thread*")); | 295 metrics::HashMetricName("birth_thread*")); |
307 | 296 |
308 metrics::TestMetricsServiceClient client; | 297 metrics::TestMetricsServiceClient client; |
309 TestMetricsLog log(kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client); | 298 TestMetricsLog log( |
| 299 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
310 EXPECT_EQ(0, log.uma_proto().profiler_event_size()); | 300 EXPECT_EQ(0, log.uma_proto().profiler_event_size()); |
311 | 301 |
312 { | 302 { |
313 ProcessDataSnapshot process_data; | 303 ProcessDataSnapshot process_data; |
314 process_data.process_id = 177; | 304 process_data.process_id = 177; |
315 process_data.tasks.push_back(TaskSnapshot()); | 305 process_data.tasks.push_back(TaskSnapshot()); |
316 process_data.tasks.back().birth.location.file_name = "a/b/file.h"; | 306 process_data.tasks.back().birth.location.file_name = "a/b/file.h"; |
317 process_data.tasks.back().birth.location.function_name = "function"; | 307 process_data.tasks.back().birth.location.function_name = "function"; |
318 process_data.tasks.back().birth.location.line_number = 1337; | 308 process_data.tasks.back().birth.location.line_number = 1337; |
319 process_data.tasks.back().birth.thread_name = "birth_thread"; | 309 process_data.tasks.back().birth.thread_name = "birth_thread"; |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
462 EXPECT_EQ(metrics::HashMetricName(""), | 452 EXPECT_EQ(metrics::HashMetricName(""), |
463 tracked_object->exec_thread_name_hash()); | 453 tracked_object->exec_thread_name_hash()); |
464 EXPECT_EQ(ProfilerEventProto::TrackedObject::RENDERER, | 454 EXPECT_EQ(ProfilerEventProto::TrackedObject::RENDERER, |
465 tracked_object->process_type()); | 455 tracked_object->process_type()); |
466 } | 456 } |
467 } | 457 } |
468 | 458 |
469 TEST_F(MetricsLogTest, ChromeChannelWrittenToProtobuf) { | 459 TEST_F(MetricsLogTest, ChromeChannelWrittenToProtobuf) { |
470 metrics::TestMetricsServiceClient client; | 460 metrics::TestMetricsServiceClient client; |
471 TestMetricsLog log( | 461 TestMetricsLog log( |
472 "user@test.com", kSessionId, MetricsLog::ONGOING_LOG, &client); | 462 "user@test.com", kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
473 EXPECT_TRUE(log.uma_proto().system_profile().has_channel()); | 463 EXPECT_TRUE(log.uma_proto().system_profile().has_channel()); |
474 } | 464 } |
OLD | NEW |