Pass FrameSinkId by const ref

RenderWidgetHostViewBase::GetFrameSinkId passed the viz::FrameSinkId
by value and was not a const method.

This CL returns a const ref of FrameSinkId and makes GetFrameSinkId a
const method so it can be accessed even if the caller has a const
pointer or reference to the RenderWidgetHostViewBase object.

Cq-Include-Trybots: luci.chromium.try:android_optional_gpu_tests_rel
Change-Id: I5142a75f21a1c0396ba868bf66699a2fb85a2c33
Bug: 672962
Reviewed-on: https://chromium-review.googlesource.com/1141985
Commit-Queue: Fady Samuel <fsamuel@chromium.org>
Reviewed-by: Khushal <khushalsagar@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Commit-Position: refs/heads/master@{#576275}
diff --git a/components/viz/common/BUILD.gn b/components/viz/common/BUILD.gn
index 3093869..44853d5 100644
--- a/components/viz/common/BUILD.gn
+++ b/components/viz/common/BUILD.gn
@@ -127,6 +127,7 @@
     "surfaces/child_local_surface_id_allocator.h",
     "surfaces/frame_sink_id.cc",
     "surfaces/frame_sink_id.h",
+    "surfaces/frame_sink_id_allocator.cc",
     "surfaces/frame_sink_id_allocator.h",
     "surfaces/local_surface_id.cc",
     "surfaces/local_surface_id.h",
diff --git a/components/viz/common/surfaces/frame_sink_id_allocator.cc b/components/viz/common/surfaces/frame_sink_id_allocator.cc
new file mode 100644
index 0000000..0073064
--- /dev/null
+++ b/components/viz/common/surfaces/frame_sink_id_allocator.cc
@@ -0,0 +1,16 @@
+// Copyright 2018 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/viz/common/surfaces/frame_sink_id_allocator.h"
+
+namespace viz {
+
+constexpr FrameSinkId g_invalid_frame_sink_id;
+
+// static
+const FrameSinkId& FrameSinkIdAllocator::InvalidFrameSinkId() {
+  return g_invalid_frame_sink_id;
+}
+
+}  // namespace viz
diff --git a/components/viz/common/surfaces/frame_sink_id_allocator.h b/components/viz/common/surfaces/frame_sink_id_allocator.h
index 3594dab..469c179 100644
--- a/components/viz/common/surfaces/frame_sink_id_allocator.h
+++ b/components/viz/common/surfaces/frame_sink_id_allocator.h
@@ -7,11 +7,13 @@
 
 #include "components/viz/common/surfaces/frame_sink_id.h"
 
+#include "components/viz/common/viz_common_export.h"
+
 namespace viz {
 
 // This class generates FrameSinkId with a fixed client_id and an
 // incrementally-increasing sink_id.
-class FrameSinkIdAllocator {
+class VIZ_COMMON_EXPORT FrameSinkIdAllocator {
  public:
   constexpr explicit FrameSinkIdAllocator(uint32_t client_id)
       : client_id_(client_id), next_sink_id_(1u) {}
@@ -20,6 +22,8 @@
     return FrameSinkId(client_id_, next_sink_id_++);
   }
 
+  static const FrameSinkId& InvalidFrameSinkId();
+
  private:
   const uint32_t client_id_;
   uint32_t next_sink_id_;
diff --git a/components/viz/common/surfaces/parent_local_surface_id_allocator.cc b/components/viz/common/surfaces/parent_local_surface_id_allocator.cc
index 014cd0c..c449f30b 100644
--- a/components/viz/common/surfaces/parent_local_surface_id_allocator.cc
+++ b/components/viz/common/surfaces/parent_local_surface_id_allocator.cc
@@ -4,14 +4,12 @@
 
 #include "components/viz/common/surfaces/parent_local_surface_id_allocator.h"
 
-#include "base/lazy_instance.h"
 #include "base/rand_util.h"
 #include "base/trace_event/trace_event.h"
 
 namespace viz {
 
-base::LazyInstance<LocalSurfaceId>::Leaky g_invalid_local_surface_id =
-    LAZY_INSTANCE_INITIALIZER;
+constexpr LocalSurfaceId g_invalid_local_surface_id;
 
 ParentLocalSurfaceIdAllocator::ParentLocalSurfaceIdAllocator()
     : current_local_surface_id_(kInvalidParentSequenceNumber,
@@ -75,7 +73,7 @@
 const LocalSurfaceId& ParentLocalSurfaceIdAllocator::GetCurrentLocalSurfaceId()
     const {
   if (is_invalid_)
-    return g_invalid_local_surface_id.Get();
+    return g_invalid_local_surface_id;
   return current_local_surface_id_;
 }
 
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc
index 7a862fa..59ebd6dc 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.cc
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc
@@ -27,6 +27,7 @@
 #include "cc/trees/layer_tree_host.h"
 #include "components/viz/common/features.h"
 #include "components/viz/common/quads/compositor_frame.h"
+#include "components/viz/common/surfaces/frame_sink_id_allocator.h"
 #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
 #include "components/viz/service/surfaces/surface.h"
 #include "components/viz/service/surfaces/surface_hittest.h"
@@ -1932,9 +1933,9 @@
   gesture_listener_manager_->DidStopFlinging();
 }
 
-viz::FrameSinkId RenderWidgetHostViewAndroid::GetFrameSinkId() {
+const viz::FrameSinkId& RenderWidgetHostViewAndroid::GetFrameSinkId() const {
   if (!delegated_frame_host_)
-    return viz::FrameSinkId();
+    return viz::FrameSinkIdAllocator::InvalidFrameSinkId();
 
   return delegated_frame_host_->GetFrameSinkId();
 }
diff --git a/content/browser/renderer_host/render_widget_host_view_android.h b/content/browser/renderer_host/render_widget_host_view_android.h
index f9882822..49bfd31 100644
--- a/content/browser/renderer_host/render_widget_host_view_android.h
+++ b/content/browser/renderer_host/render_widget_host_view_android.h
@@ -169,7 +169,7 @@
   void OnDidNavigateMainFrameToNewPage() override;
   void SetNeedsBeginFrames(bool needs_begin_frames) override;
   void SetWantsAnimateOnlyBeginFrames() override;
-  viz::FrameSinkId GetFrameSinkId() override;
+  const viz::FrameSinkId& GetFrameSinkId() const override;
   bool TransformPointToLocalCoordSpaceLegacy(
       const gfx::PointF& point,
       const viz::SurfaceId& original_surface,
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.cc b/content/browser/renderer_host/render_widget_host_view_aura.cc
index 1333bce..f849b31 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.cc
+++ b/content/browser/renderer_host/render_widget_host_view_aura.cc
@@ -2317,7 +2317,7 @@
   ui::GestureRecognizer::Get()->CancelActiveTouches(window_);
 }
 
-viz::FrameSinkId RenderWidgetHostViewAura::GetFrameSinkId() {
+const viz::FrameSinkId& RenderWidgetHostViewAura::GetFrameSinkId() const {
   return frame_sink_id_;
 }
 
diff --git a/content/browser/renderer_host/render_widget_host_view_aura.h b/content/browser/renderer_host/render_widget_host_view_aura.h
index b0d13ffb..a383132 100644
--- a/content/browser/renderer_host/render_widget_host_view_aura.h
+++ b/content/browser/renderer_host/render_widget_host_view_aura.h
@@ -181,7 +181,7 @@
   bool RequestRepaintForTesting() override;
   void DidStopFlinging() override;
   void OnDidNavigateMainFrameToNewPage() override;
-  viz::FrameSinkId GetFrameSinkId() override;
+  const viz::FrameSinkId& GetFrameSinkId() const override;
   viz::LocalSurfaceId GetLocalSurfaceId() const override;
   bool TransformPointToLocalCoordSpaceLegacy(
       const gfx::PointF& point,
diff --git a/content/browser/renderer_host/render_widget_host_view_base.cc b/content/browser/renderer_host/render_widget_host_view_base.cc
index d39e1392..e137d89 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.cc
+++ b/content/browser/renderer_host/render_widget_host_view_base.cc
@@ -515,10 +515,6 @@
     host()->DidProcessFrame(frame_token);
 }
 
-viz::FrameSinkId RenderWidgetHostViewBase::GetFrameSinkId() {
-  return viz::FrameSinkId();
-}
-
 viz::LocalSurfaceId RenderWidgetHostViewBase::GetLocalSurfaceId() const {
   return viz::LocalSurfaceId();
 }
diff --git a/content/browser/renderer_host/render_widget_host_view_base.h b/content/browser/renderer_host/render_widget_host_view_base.h
index 1b2563d..2aff5049 100644
--- a/content/browser/renderer_host/render_widget_host_view_base.h
+++ b/content/browser/renderer_host/render_widget_host_view_base.h
@@ -313,8 +313,7 @@
   virtual void DidStopFlinging() {}
 
   // Returns the ID associated with the CompositorFrameSink of this view.
-  // TODO(fsamuel): Return by const ref.
-  virtual viz::FrameSinkId GetFrameSinkId();
+  virtual const viz::FrameSinkId& GetFrameSinkId() const = 0;
 
   // Returns the LocalSurfaceId allocated by the parent client for this view.
   // TODO(fsamuel): Return by const ref.
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.cc b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
index 6842a0ac..3928f26e 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame.cc
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame.cc
@@ -692,7 +692,7 @@
   return host()->delegate()->HasMouseLock(host());
 }
 
-viz::FrameSinkId RenderWidgetHostViewChildFrame::GetFrameSinkId() {
+const viz::FrameSinkId& RenderWidgetHostViewChildFrame::GetFrameSinkId() const {
   return frame_sink_id_;
 }
 
diff --git a/content/browser/renderer_host/render_widget_host_view_child_frame.h b/content/browser/renderer_host/render_widget_host_view_child_frame.h
index c324ff0..6e16688e 100644
--- a/content/browser/renderer_host/render_widget_host_view_child_frame.h
+++ b/content/browser/renderer_host/render_widget_host_view_child_frame.h
@@ -143,7 +143,7 @@
   void DidStopFlinging() override;
   bool LockMouse() override;
   void UnlockMouse() override;
-  viz::FrameSinkId GetFrameSinkId() override;
+  const viz::FrameSinkId& GetFrameSinkId() const override;
   viz::LocalSurfaceId GetLocalSurfaceId() const override;
   void PreProcessTouchEvent(const blink::WebTouchEvent& event) override;
   viz::FrameSinkId GetRootFrameSinkId() override;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.h b/content/browser/renderer_host/render_widget_host_view_mac.h
index 1a60e3cd..1aaa7da9 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.h
+++ b/content/browser/renderer_host/render_widget_host_view_mac.h
@@ -179,7 +179,7 @@
   std::unique_ptr<SyntheticGestureTarget> CreateSyntheticGestureTarget()
       override;
 
-  viz::FrameSinkId GetFrameSinkId() override;
+  const viz::FrameSinkId& GetFrameSinkId() const override;
   viz::LocalSurfaceId GetLocalSurfaceId() const override;
   // Returns true when we can do SurfaceHitTesting for the event type.
   bool ShouldRouteEvent(const blink::WebInputEvent& event) const;
diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
index d34b8d2..acc8c7a0 100644
--- a/content/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
@@ -1126,7 +1126,7 @@
   return browser_compositor_->GetRendererLocalSurfaceId();
 }
 
-viz::FrameSinkId RenderWidgetHostViewMac::GetFrameSinkId() {
+const viz::FrameSinkId& RenderWidgetHostViewMac::GetFrameSinkId() const {
   return browser_compositor_->GetDelegatedFrameHost()->frame_sink_id();
 }
 
diff --git a/content/test/test_render_view_host.cc b/content/test/test_render_view_host.cc
index 428b8d2..7daaf2bd 100644
--- a/content/test/test_render_view_host.cc
+++ b/content/test/test_render_view_host.cc
@@ -193,7 +193,7 @@
 void TestRenderWidgetHostView::UnlockMouse() {
 }
 
-viz::FrameSinkId TestRenderWidgetHostView::GetFrameSinkId() {
+const viz::FrameSinkId& TestRenderWidgetHostView::GetFrameSinkId() const {
   return frame_sink_id_;
 }
 
diff --git a/content/test/test_render_view_host.h b/content/test/test_render_view_host.h
index 8a6e7982..9077fb9 100644
--- a/content/test/test_render_view_host.h
+++ b/content/test/test_render_view_host.h
@@ -114,7 +114,7 @@
   gfx::Rect GetBoundsInRootWindow() override;
   bool LockMouse() override;
   void UnlockMouse() override;
-  viz::FrameSinkId GetFrameSinkId() override;
+  const viz::FrameSinkId& GetFrameSinkId() const override;
   viz::SurfaceId GetCurrentSurfaceId() const override;
 
   bool is_showing() const { return is_showing_; }
diff --git a/ui/android/delegated_frame_host_android.cc b/ui/android/delegated_frame_host_android.cc
index e305ae3..06a0186 100644
--- a/ui/android/delegated_frame_host_android.cc
+++ b/ui/android/delegated_frame_host_android.cc
@@ -113,7 +113,7 @@
   support_->DidNotProduceFrame(ack);
 }
 
-viz::FrameSinkId DelegatedFrameHostAndroid::GetFrameSinkId() const {
+const viz::FrameSinkId& DelegatedFrameHostAndroid::GetFrameSinkId() const {
   return frame_sink_id_;
 }
 
diff --git a/ui/android/delegated_frame_host_android.h b/ui/android/delegated_frame_host_android.h
index 2c6ba56b..563be8e 100644
--- a/ui/android/delegated_frame_host_android.h
+++ b/ui/android/delegated_frame_host_android.h
@@ -95,7 +95,7 @@
 
   cc::SurfaceLayer* content_layer_for_testing() { return content_layer_.get(); }
 
-  viz::FrameSinkId GetFrameSinkId() const;
+  const viz::FrameSinkId& GetFrameSinkId() const;
 
   // Should only be called when the host has a content layer. Use this for one-
   // off screen capture, not for video. Always provides RGBA_BITMAP