blob: ff6fb56e1a8625328fd0bdaf0654f8e6964b35f1 [file] [log] [blame]
mblsha3cfcb7c2017-04-20 14:59:391// Copyright 2017 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/metrics/browser_window_histogram_helper.h"
6
7#include "components/startup_metric_utils/browser/startup_metric_utils.h"
8#include "ui/compositor/compositor.h"
9
10BrowserWindowHistogramHelper::~BrowserWindowHistogramHelper() {}
11
12// static
13std::unique_ptr<BrowserWindowHistogramHelper>
14BrowserWindowHistogramHelper::MaybeRecordValueAndCreateInstanceOnBrowserPaint(
15 ui::Compositor* compositor) {
16 static bool did_first_paint = false;
17 if (did_first_paint)
18 return std::unique_ptr<BrowserWindowHistogramHelper>();
19
20 did_first_paint = true;
21
22 return std::unique_ptr<BrowserWindowHistogramHelper>(
23 new BrowserWindowHistogramHelper(compositor));
24}
25
26BrowserWindowHistogramHelper::BrowserWindowHistogramHelper(
27 ui::Compositor* compositor)
28 : scoped_observer_(this) {
29 startup_metric_utils::RecordBrowserWindowFirstPaint(base::TimeTicks::Now());
30
31#if defined(OS_MACOSX)
32 if (!compositor) {
33 // In Cocoa version of Chromium, UI is rendered inside the main process
34 // using CoreAnimation compositor, and at this point everything is already
35 // visible to the user.
36 startup_metric_utils::RecordBrowserWindowFirstPaintCompositingEnded(
37 base::TimeTicks::Now());
38 return;
39 }
40#endif // OS_MACOSX
41
42 scoped_observer_.Add(compositor);
43}
44
45void BrowserWindowHistogramHelper::OnCompositingEnded(
46 ui::Compositor* compositor) {
47 startup_metric_utils::RecordBrowserWindowFirstPaintCompositingEnded(
48 base::TimeTicks::Now());
49
50 scoped_observer_.RemoveAll();
51}
52
53void BrowserWindowHistogramHelper::OnCompositingShuttingDown(
54 ui::Compositor* compositor) {
55 scoped_observer_.RemoveAll();
56}