Chromium Code Reviews| Index: components/page_load_metrics/browser/page_load_metrics_web_contents_observer.cc |
| diff --git a/components/page_load_metrics/browser/page_load_metrics_web_contents_observer.cc b/components/page_load_metrics/browser/page_load_metrics_web_contents_observer.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..c46e2b5eb8cce31bb722938e4dc9dde0056a6315 |
| --- /dev/null |
| +++ b/components/page_load_metrics/browser/page_load_metrics_web_contents_observer.cc |
| @@ -0,0 +1,64 @@ |
| +// Copyright 2015 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "components/page_load_metrics/browser/page_load_metrics_web_contents_observer.h" |
| + |
| +#include "base/metrics/histogram.h" |
| +#include "components/page_load_metrics/common/page_load_metrics_messages.h" |
| +#include "content/public/browser/render_frame_host.h" |
| +#include "content/public/browser/web_contents.h" |
| +#include "content/public/browser/web_contents_observer.h" |
| +#include "content/public/browser/web_contents_user_data.h" |
| +#include "ipc/ipc_message.h" |
| +#include "ipc/ipc_message_macros.h" |
| + |
| +DEFINE_WEB_CONTENTS_USER_DATA_KEY( |
| + page_load_metrics::PageLoadMetricsWebContentsObserver); |
| + |
| +namespace page_load_metrics { |
| + |
| +PageLoadMetricsWebContentsObserver::PageLoadMetricsWebContentsObserver( |
| + content::WebContents* web_contents) |
| + : content::WebContentsObserver(web_contents) { |
| +} |
| + |
| +PageLoadMetricsWebContentsObserver::~PageLoadMetricsWebContentsObserver() {} |
| + |
| +bool PageLoadMetricsWebContentsObserver::OnMessageReceived( |
| + const IPC::Message& message, content::RenderFrameHost* render_frame_host) { |
| + bool handled = true; |
| + IPC_BEGIN_MESSAGE_MAP(PageLoadMetricsWebContentsObserver, message) |
| + IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_DOMContentLoadedEvent, |
| + OnDOMContentLoadedEvent) |
|
davidben
2015/08/18 21:39:45
What's the difference between this and WCO::Docume
Bryan McQuade
2015/08/19 11:45:14
Thanks for asking about this. I added some additio
|
| + IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_LoadEvent, OnLoadEvent) |
|
davidben
2015/08/18 21:39:45
What's the difference between this and WCO::DidFin
Bryan McQuade
2015/08/19 11:45:14
Same as above.
|
| + IPC_MESSAGE_HANDLER(PageLoadMetricsMsg_FirstLayout, OnFirstLayout) |
| + IPC_MESSAGE_UNHANDLED(handled = false) |
| + IPC_END_MESSAGE_MAP() |
| + return handled; |
| +} |
| + |
| +#define PAGE_LOAD_HISTOGRAM(name, sample) \ |
| + UMA_HISTOGRAM_CUSTOM_TIMES(name, \ |
| + sample, \ |
| + base::TimeDelta::FromMilliseconds(10), \ |
| + base::TimeDelta::FromMinutes(10), \ |
| + 100); |
| + |
| +void PageLoadMetricsWebContentsObserver::OnDOMContentLoadedEvent( |
| + base::TimeDelta dom_content_loaded_event) { |
| + PAGE_LOAD_HISTOGRAM( |
| + "PageLoad.TimeTo.DOMContentLoadedEvent", dom_content_loaded_event); |
|
Randy Smith (Not in Mondays)
2015/08/17 19:31:07
If these are new UMAs, shouldn't they have entries
Bryan McQuade
2015/08/25 13:53:35
Done.
|
| +} |
| + |
| +void PageLoadMetricsWebContentsObserver::OnLoadEvent( |
| + base::TimeDelta load_event) { |
| + PAGE_LOAD_HISTOGRAM("PageLoad.TimeTo.LoadEvent", load_event); |
| +} |
| + |
| +void PageLoadMetricsWebContentsObserver::OnFirstLayout( |
| + base::TimeDelta first_layout) { |
| + PAGE_LOAD_HISTOGRAM("PageLoad.TimeTo.FirstLayout", first_layout); |
| +} |
| + |
| +} // namespace page_load_metrics |