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

Side by Side Diff: chrome/test/nacl/nacl_browsertest.cc

Issue 10825462: Add browser_test to check that NaCl is logging UMA samples correctly. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/json/json_reader.h" 6 #include "base/json/json_reader.h"
7 #include "base/metrics/histogram.h"
8 #include "base/metrics/statistics_recorder.h"
7 #include "base/path_service.h" 9 #include "base/path_service.h"
8 #include "base/timer.h" 10 #include "base/timer.h"
9 #include "chrome/browser/ui/browser_tabstrip.h" 11 #include "chrome/browser/ui/browser_tabstrip.h"
10 #include "chrome/common/chrome_paths.h" 12 #include "chrome/common/chrome_paths.h"
11 #include "chrome/common/chrome_switches.h" 13 #include "chrome/common/chrome_switches.h"
12 #include "chrome/test/base/in_process_browser_test.h" 14 #include "chrome/test/base/in_process_browser_test.h"
13 #include "chrome/test/base/ui_test_utils.h" 15 #include "chrome/test/base/ui_test_utils.h"
14 #include "content/public/browser/dom_operation_notification_details.h" 16 #include "content/public/browser/dom_operation_notification_details.h"
17 #include "content/public/browser/histogram_fetcher.h"
15 #include "content/public/browser/notification_observer.h" 18 #include "content/public/browser/notification_observer.h"
16 #include "content/public/browser/notification_registrar.h" 19 #include "content/public/browser/notification_registrar.h"
17 #include "content/public/browser/notification_types.h" 20 #include "content/public/browser/notification_types.h"
18 #include "content/public/browser/plugin_service.h" 21 #include "content/public/browser/plugin_service.h"
19 #include "content/public/browser/render_view_host.h" 22 #include "content/public/browser/render_view_host.h"
20 #include "content/public/browser/web_contents.h" 23 #include "content/public/browser/web_contents.h"
24 #include "native_client/src/trusted/service_runtime/nacl_error_code.h"
21 #include "net/base/net_util.h" 25 #include "net/base/net_util.h"
26 #include "ppapi/native_client/src/trusted/plugin/plugin_error.h"
22 #include "webkit/plugins/webplugininfo.h" 27 #include "webkit/plugins/webplugininfo.h"
23 28
24 namespace { 29 namespace {
25 30
26 // Base class for handling a stream of automation messages produced by a 31 // Base class for handling a stream of automation messages produced by a
27 // JavascriptTestObserver. 32 // JavascriptTestObserver.
28 class TestMessageHandler { 33 class TestMessageHandler {
29 public: 34 public:
30 enum MessageResponse { 35 enum MessageResponse {
31 // Reset the timeout and keep running. 36 // Reset the timeout and keep running.
(...skipping 273 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 #if !(defined(ADDRESS_SANITIZER) && defined(OS_LINUX)) 310 #if !(defined(ADDRESS_SANITIZER) && defined(OS_LINUX))
306 311
307 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, SimpleLoadTest) { 312 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, SimpleLoadTest) {
308 RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html")); 313 RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html"));
309 } 314 }
310 315
311 IN_PROC_BROWSER_TEST_F(NaClBrowserTestGLibc, SimpleLoadTest) { 316 IN_PROC_BROWSER_TEST_F(NaClBrowserTestGLibc, SimpleLoadTest) {
312 RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html")); 317 RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html"));
313 } 318 }
314 319
320 class HistogramHelper {
Mark Seaborn 2012/08/21 19:41:37 Should this all be in a separate file to be more o
Nick Bray (chromium) 2012/08/24 18:17:48 I agree, but I was planning to do structural refor
321 public:
322 HistogramHelper() {}
323
324 // Each child process may have its own histogram data, make sure this data
325 // gets accumulated into the browser process before we examine the histograms.
326 void Fetch() {
327 base::Closure callback = base::Bind(
328 &HistogramHelper::FetchCallback,
jar (doing other things) 2012/08/23 00:35:39 nit: move 328 to end of 327. For function calls,
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
329 base::Unretained(this));
330
331 content::FetchHistogramsAsynchronously(
332 MessageLoop::current(), callback,
Mark Seaborn 2012/08/21 19:41:37 Should you be creating a new message loop object s
Nick Bray (chromium) 2012/08/24 18:17:48 As far as I know, this is idiomatic for browser_te
333 base::TimeDelta::FromMilliseconds(60000));
Mark Seaborn 2012/08/21 19:41:37 Comment: "give up after 60s, which anyway is longe
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
334 content::RunMessageLoop();
335 }
336
337 // We know the exact number of samples in a bucket, and that no other bucket
338 // should have samples.
339 void ExpectUniqueSample(const std::string &name, size_t bucket,
Mark Seaborn 2012/08/21 19:41:37 "&" spacing style. 'bucket' -> 'bucket_id', perha
jar (doing other things) 2012/08/23 00:35:39 nit: For function definitions... one arg per line
Mark Seaborn 2012/08/24 19:30:42 Ping.
Nick Bray (chromium) 2012/08/24 21:13:56 Done.
340 base::Histogram::Count count) {
Mark Seaborn 2012/08/21 19:41:37 'count' -> 'expected_count', just for clarity? Sa
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
341 base::Histogram* histogram = base::StatisticsRecorder::FindHistogram(name);
342 ASSERT_NE((base::Histogram*)NULL, histogram) << "Histogram \"" << name <<
jar (doing other things) 2012/08/23 00:35:39 nit: avoid C style cast (here and below). Best is
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
343 "\" does not exist.";
344
345 base::Histogram::SampleSet samples;
346 histogram->SnapshotSample(&samples);
347 CheckBucketCount(name, bucket, count, samples);
348 CheckTotalCount(name, count, samples);
349 }
350
351 // We don't know the values of the samples, but we know how many there are.
352 void ExpectTotalCount(const std::string &name, base::Histogram::Count count) {
Mark Seaborn 2012/08/21 19:41:37 "&" spacing style.
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
353 base::Histogram* histogram = base::StatisticsRecorder::FindHistogram(name);
354 ASSERT_NE((base::Histogram*)NULL, histogram) << "Histogram \"" << name <<
355 "\" does not exist.";
356
357 base::Histogram::SampleSet samples;
358 histogram->SnapshotSample(&samples);
359 CheckTotalCount(name, count, samples);
360 }
361
362 private:
363 void FetchCallback() {
364 MessageLoopForUI::current()->Quit();
365 }
366
367 void CheckBucketCount(
368 const std::string &name,
369 size_t bucket,
370 base::Histogram::Count count,
371 base::Histogram::SampleSet& samples) {
jar (doing other things) 2012/08/23 00:35:39 nit: prefer aligning args with paren in definition
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
372 EXPECT_EQ(count, samples.counts(bucket)) << "Histogram \"" << name <<
373 "\" does not have the right number of samples (" << count <<
374 ") in the expected bucket (" << bucket << ").";
375 }
376
377 void CheckTotalCount(
378 const std::string &name,
379 base::Histogram::Count count,
380 base::Histogram::SampleSet& samples) {
381 EXPECT_EQ(count, samples.TotalCount()) << "Histogram \"" << name <<
382 "\" does not have the right total number of samples (" << count << ").";
383 }
384 };
385
386 // TODO(ncbray) create multiple variants via macros.
Mark Seaborn 2012/08/21 19:41:37 Multiple variants to do what?
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
387 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlib, UMALoadTest) {
388 // Sanity check.
389 ASSERT_TRUE(base::StatisticsRecorder::IsActive());
390
391 // Load a NaCl module to generate UMA data.
392 RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html"));
393
394 // Make sure histograms from child processes have been accumulated in the
395 // browser brocess.
396 HistogramHelper histograms;
397 histograms.Fetch();
398
399 // Did the plugin report success?
400 histograms.ExpectUniqueSample("NaCl.LoadStatus.Plugin",
401 plugin::ERROR_LOAD_SUCCESS, 1);
402
403 // Did the sel_ldr report success?
404 histograms.ExpectUniqueSample("NaCl.LoadStatus.SelLdr",
405 LOAD_OK, 1);
406
407 // Make sure we have other important histograms.
408 histograms.ExpectTotalCount("NaCl.Perf.StartupTime.LoadModule", 1);
409 histograms.ExpectTotalCount("NaCl.Perf.StartupTime.Total", 1);
410 histograms.ExpectTotalCount("NaCl.Perf.Size.Manifest", 1);
411 histograms.ExpectTotalCount("NaCl.Perf.Size.Nexe", 1);
Mark Seaborn 2012/08/21 19:41:37 Can you add a comment saying something like: This
Nick Bray (chromium) 2012/08/24 18:17:48 Done.
412 }
413
315 #endif // !(defined(ADDRESS_SANITIZER) && defined(OS_LINUX)) 414 #endif // !(defined(ADDRESS_SANITIZER) && defined(OS_LINUX))
316 415
317 } // namespace anonymous 416 } // namespace anonymous
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698