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

Unified Diff: chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc

Issue 2823523003: [Page Load Metrics] PageLoadMetrics Mojofication. (Closed)
Patch Set: rebase Created 3 years, 7 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
Index: chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
diff --git a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
index 95ae2c28a875e85f8e3077b1645cabfc30997602..9996789b18d90ae56532d9efe4f100b0b9e16bd4 100644
--- a/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
+++ b/chrome/renderer/page_load_metrics/metrics_render_frame_observer.cc
@@ -6,12 +6,17 @@
#include <string>
+#include "base/feature_list.h"
#include "base/memory/ptr_util.h"
#include "base/time/time.h"
#include "base/timer/timer.h"
+#include "chrome/common/chrome_features.h"
+#include "chrome/common/page_load_metrics/page_load_metrics_messages.h"
#include "chrome/renderer/page_load_metrics/page_timing_metrics_sender.h"
+#include "chrome/renderer/page_load_metrics/page_timing_sender.h"
#include "chrome/renderer/page_load_metrics/renderer_page_track_decider.h"
#include "chrome/renderer/searchbox/search_bouncer.h"
+#include "content/public/common/associated_interface_provider.h"
#include "content/public/renderer/render_frame.h"
#include "third_party/WebKit/public/web/WebDataSource.h"
#include "third_party/WebKit/public/web/WebDocument.h"
@@ -29,6 +34,45 @@ base::TimeDelta ClampDelta(double event, double start) {
return base::Time::FromDoubleT(event) - base::Time::FromDoubleT(start);
}
+class LegacyIPCPageTimingSender : public PageTimingSender {
+ public:
+ LegacyIPCPageTimingSender(content::RenderFrame* render_frame,
+ const int routing_id)
+ : render_frame_(render_frame), routing_id_(routing_id) {}
+ ~LegacyIPCPageTimingSender() override {}
+
+ void SendTiming(const mojom::PageLoadTimingPtr& timing,
+ const mojom::PageLoadMetadataPtr& metadata) override {
+ DCHECK(render_frame_);
+ render_frame_->Send(
+ new PageLoadMetricsMsg_TimingUpdated(routing_id_, *timing, *metadata));
+ }
+
+ private:
+ content::RenderFrame* const render_frame_;
+ const int routing_id_;
+};
+
+class MojoIPCPageTimingSender : public PageTimingSender {
+ public:
+ explicit MojoIPCPageTimingSender(content::RenderFrame* render_frame) {
+ DCHECK(render_frame);
+ render_frame->GetRemoteAssociatedInterfaces()->GetInterface(
+ &page_load_metrics_);
+ }
+ ~MojoIPCPageTimingSender() override {}
+ void SendTiming(const mojom::PageLoadTimingPtr& timing,
+ const mojom::PageLoadMetadataPtr& metadata) override {
+ DCHECK(page_load_metrics_);
+ page_load_metrics_->UpdateTiming(timing->Clone(), metadata->Clone());
+ }
+
+ private:
+ // Use associated interface to make sure mojo messages are ordered with regard
+ // to legacy IPC messages.
+ mojom::PageLoadMetricsAssociatedPtr page_load_metrics_;
+};
+
} // namespace
MetricsRenderFrameObserver::MetricsRenderFrameObserver(
@@ -71,7 +115,7 @@ void MetricsRenderFrameObserver::DidCommitProvisionalLoad(
// those metrics become available.
if (ShouldSendMetrics()) {
page_timing_metrics_sender_ = base::MakeUnique<PageTimingMetricsSender>(
- this, routing_id(), CreateTimer(), GetTiming());
+ CreatePageTimingSender(), CreateTimer(), GetTiming());
}
}
@@ -167,6 +211,16 @@ std::unique_ptr<base::Timer> MetricsRenderFrameObserver::CreateTimer() const {
return base::WrapUnique(new base::OneShotTimer);
}
+std::unique_ptr<PageTimingSender>
+MetricsRenderFrameObserver::CreatePageTimingSender() {
+ if (base::FeatureList::IsEnabled(features::kPageLoadMetricsMojofication)) {
+ return base::WrapUnique<PageTimingSender>(
+ new MojoIPCPageTimingSender(render_frame()));
+ }
+ return base::WrapUnique<PageTimingSender>(
+ new LegacyIPCPageTimingSender(render_frame(), routing_id()));
+}
+
bool MetricsRenderFrameObserver::HasNoRenderFrame() const {
bool no_frame = !render_frame() || !render_frame()->GetWebFrame();
DCHECK(!no_frame);

Powered by Google App Engine
This is Rietveld 408576698