Index: android_webview/browser/browser_view_renderer.h |
diff --git a/android_webview/browser/browser_view_renderer.h b/android_webview/browser/browser_view_renderer.h |
index 56874d79b4d808381584c5cfabfea23f2f4b03cc..34e0f2ee35d737b2107adb9f790167863df4b41a 100644 |
--- a/android_webview/browser/browser_view_renderer.h |
+++ b/android_webview/browser/browser_view_renderer.h |
@@ -11,6 +11,7 @@ |
#include <set> |
#include "android_webview/browser/compositor_frame_producer.h" |
+#include "android_webview/browser/compositor_id.h" |
#include "android_webview/browser/parent_compositor_draw_constraints.h" |
#include "base/callback.h" |
#include "base/cancelable_callback.h" |
@@ -18,6 +19,7 @@ |
#include "base/trace_event/trace_event.h" |
#include "content/public/browser/android/synchronous_compositor.h" |
#include "content/public/browser/android/synchronous_compositor_client.h" |
+#include "content/public/browser/web_contents_observer.h" |
#include "third_party/skia/include/core/SkRefCnt.h" |
#include "ui/gfx/geometry/rect.h" |
#include "ui/gfx/geometry/size_f.h" |
@@ -27,6 +29,7 @@ class SkCanvas; |
class SkPicture; |
namespace content { |
+class RenderViewHost; |
class WebContents; |
} |
@@ -39,6 +42,7 @@ class CompositorFrameConsumer; |
// Interface for all the WebView-specific content rendering operations. |
// Provides software and hardware rendering and the Capture Picture API. |
class BrowserViewRenderer : public content::SynchronousCompositorClient, |
+ public content::WebContentsObserver, |
public CompositorFrameProducer { |
public: |
static void CalculateTileMemoryPolicy(); |
@@ -46,6 +50,7 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient, |
content::WebContents* web_contents); |
BrowserViewRenderer( |
+ content::WebContents* web_contents, |
BrowserViewRendererClient* client, |
const scoped_refptr<base::SingleThreadTaskRunner>& ui_task_runner); |
@@ -108,11 +113,12 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient, |
void TrimMemory(); |
// SynchronousCompositorClient overrides. |
- void DidInitializeCompositor( |
- content::SynchronousCompositor* compositor) override; |
- void DidDestroyCompositor( |
- content::SynchronousCompositor* compositor) override; |
- void DidBecomeCurrent(content::SynchronousCompositor* compositor) override; |
+ void DidInitializeCompositor(content::SynchronousCompositor* compositor, |
+ int process_id, |
+ int routing_id) override; |
+ void DidDestroyCompositor(content::SynchronousCompositor* compositor, |
+ int process_id, |
+ int routing_id) override; |
void PostInvalidate() override; |
void DidUpdateContent() override; |
void UpdateRootLayerState(const gfx::Vector2dF& total_scroll_offset_dip, |
@@ -125,6 +131,10 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient, |
const gfx::Vector2dF& latest_overscroll_delta, |
const gfx::Vector2dF& current_fling_velocity) override; |
+ // content::WebContentsObserver overrides |
+ void RenderViewHostChanged(content::RenderViewHost* old_host, |
+ content::RenderViewHost* new_host) override; |
+ |
// CompositorFrameProducer overrides |
void OnParentDrawConstraintsUpdated( |
CompositorFrameConsumer* compositor_frame_consumer) override; |
@@ -159,11 +169,15 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient, |
std::set<CompositorFrameConsumer*> compositor_frame_consumers_; |
// The current compositor that's owned by the current RVH. |
+ // When compositor_ != nullptr, compositor_id_ is the id of compositor_. |
+ // When compositor_ == nullptr, compositor_id_ is the id of the future |
+ // compositor. |
content::SynchronousCompositor* compositor_; |
+ CompositorID compositor_id_; |
// A map from compositor's per-WebView unique ID to the compositor's raw |
// pointer. A raw pointer here is fine because the entry will be erased when |
// a compositor is destroyed. |
- std::map<size_t, content::SynchronousCompositor*> compositor_map_; |
+ std::map<CompositorID, content::SynchronousCompositor*> compositor_map_; |
bool is_paused_; |
bool view_visible_; |
@@ -200,8 +214,6 @@ class BrowserViewRenderer : public content::SynchronousCompositorClient, |
// TODO(miletus): Make overscroll_rounding_error_ a gfx::ScrollOffset. |
gfx::Vector2dF overscroll_rounding_error_; |
- uint32_t next_compositor_id_; |
- |
ParentCompositorDrawConstraints external_draw_constraints_; |
DISALLOW_COPY_AND_ASSIGN(BrowserViewRenderer); |