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

Unified Diff: android_webview/browser/compositor_proxy.h

Issue 655813004: Part 1: Refactor Android WebView graphics code (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor
Patch Set: rebase Created 6 years, 2 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: android_webview/browser/compositor_proxy.h
diff --git a/android_webview/browser/compositor_proxy.h b/android_webview/browser/compositor_proxy.h
new file mode 100644
index 0000000000000000000000000000000000000000..1674da6e2a4cda01c571670975826f254dd94f4d
--- /dev/null
+++ b/android_webview/browser/compositor_proxy.h
@@ -0,0 +1,121 @@
+// Copyright 2014 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.
+
+#ifndef ANDROID_WEBVIEW_BROWSER_COMPOSITOR_PROXY_H_
+#define ANDROID_WEBVIEW_BROWSER_COMPOSITOR_PROXY_H_
+
+#include "android_webview/browser/browser_view_renderer.h"
+#include "android_webview/browser/browser_view_renderer_proxy.h"
+#include "android_webview/browser/gl_view_renderer_manager.h"
+#include "android_webview/browser/hardware_renderer.h"
+#include "android_webview/browser/hardware_renderer_proxy.h"
+#include "android_webview/browser/parent_compositor_draw_constraints.h"
+#include "base/cancelable_callback.h"
+#include "base/memory/weak_ptr.h"
+#include "base/message_loop/message_loop_proxy.h"
+#include "base/synchronization/lock.h"
+#include "cc/output/compositor_frame.h"
+#include "cc/output/compositor_frame_ack.h"
+#include "ui/gfx/geometry/rect.h"
+#include "ui/gfx/geometry/vector2d.h"
+
+struct AwDrawGLInfo;
+
+namespace android_webview {
+
+namespace internal {
+class RequestDrawGLTracker;
+}
+
+class AwGLMethods;
+class BrowserViewRenderer;
+class InsideHardwareReleaseReset;
+
+// This class is used to pass data between UI thread and RenderThread.
+class CompositorProxy : public BrowserViewRendererProxy,
+ public HardwareRendererProxy {
+ public:
+ CompositorProxy(scoped_refptr<base::MessageLoopProxy> ui_loop,
+ AwGLMethods* gl_methods);
+ ~CompositorProxy();
boliu 2014/10/23 16:40:05 virtual
+
+ void ClientRequestDrawGL();
+ void DidDrawGLProcess();
+
+ bool IsInsideHardwareRelease() const;
+ void SetBrowserViewRenderer(BrowserViewRenderer* browser_view_renderer);
+
+ // BrowserViewRendererProxy overrides.
+ virtual void SetScrollOffset(gfx::Vector2d scroll_offset) override;
+ virtual void SetCompositorFrame(scoped_ptr<cc::CompositorFrame> frame,
+ bool force_commit) override;
+ virtual bool HasCompositorFrame() const override;
+ virtual const ParentCompositorDrawConstraints GetParentDrawConstraints()
+ const override;
+ virtual void SwapReturnedResources(
+ cc::ReturnedResourceArray* resources) override;
+ virtual void SetForceInvalidateOnNextDrawGL(
+ bool needs_force_invalidate_on_next_draw_gl) override;
+ virtual bool NeedsForceInvalidateOnNextDrawGL() const override;
+
+ // HardwareRendererProxy overrides.
+ virtual gfx::Vector2d GetScrollOffset() override;
+ virtual scoped_ptr<cc::CompositorFrame> PassCompositorFrame() override;
+ virtual bool SetParentCompositorDrawConstraints(
+ const ParentCompositorDrawConstraints& parent_draw_constraints) override;
+ virtual void PostExternalDrawConstraintsToChildCompositor(
+ const ParentCompositorDrawConstraints& parent_draw_constraints) override;
+ virtual void InsertReturnedResources(
+ const cc::ReturnedResourceArray& resources) override;
+ virtual bool ForceCommit() const override;
+ virtual void DidSkipCommitFrame() override;
+
+ private:
+ friend class InsideHardwareReleaseReset;
+ friend class internal::RequestDrawGLTracker;
+
+ void ResetRequestDrawGLCallback();
+ void ClientRequestDrawGLOnUIThread();
+ void SetParentDrawConstraintsOnUIThread();
+ void DidSkipCommitFrameOnUIThread();
+ void SetInsideHardwareRelease(bool inside_hardware_release);
+ void ReturnUnusedResources();
+
+ scoped_refptr<base::MessageLoopProxy> ui_loop_;
+ AwGLMethods* gl_methods_on_ui_;
+ base::WeakPtr<CompositorProxy> ui_thread_weak_ptr_;
+ base::CancelableClosure request_draw_gl_cancelable_closure_;
+
+ // Accessed by both UI and RT thread.
+ mutable base::Lock lock_;
+ gfx::Vector2d scroll_offset_;
+ scoped_ptr<cc::CompositorFrame> compositor_frame_;
+ bool force_commit_;
+ bool inside_hardware_release_;
+ bool needs_force_invalidate_on_next_draw_gl_;
+ ParentCompositorDrawConstraints parent_draw_constraints_;
+ cc::ReturnedResourceArray returned_resources_;
+ base::Closure request_draw_gl_closure_;
+
+ base::WeakPtrFactory<CompositorProxy> weak_factory_on_ui_thread_;
+
+ BrowserViewRenderer* browser_view_renderer_;
boliu 2014/10/23 16:40:05 this is in the "ui only" category, move it up ther
hush (inactive) 2014/10/24 21:31:33 Done.
+
+ DISALLOW_COPY_AND_ASSIGN(CompositorProxy);
+};
+
+class InsideHardwareReleaseReset {
+ public:
+ explicit InsideHardwareReleaseReset(CompositorProxy* compositor_proxy);
+ ~InsideHardwareReleaseReset();
+
+ private:
+ CompositorProxy* compositor_proxy_;
+
+ DISALLOW_COPY_AND_ASSIGN(InsideHardwareReleaseReset);
+};
+
+} // namespace android_webview
+
+#endif // ANDROID_WEBVIEW_BROWSER_COMPOSITOR_PROXY_H_

Powered by Google App Engine
This is Rietveld 408576698