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

Unified Diff: cc/output/output_surface.h

Issue 1531403002: Revert "Delete CC." (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « cc/output/gl_renderer_unittest.cc ('k') | cc/output/output_surface.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/output/output_surface.h
diff --git a/cc/output/output_surface.h b/cc/output/output_surface.h
new file mode 100644
index 0000000000000000000000000000000000000000..8994a6bffafbb2651874575d663061f6a1c2904d
--- /dev/null
+++ b/cc/output/output_surface.h
@@ -0,0 +1,198 @@
+// Copyright 2012 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 CC_OUTPUT_OUTPUT_SURFACE_H_
+#define CC_OUTPUT_OUTPUT_SURFACE_H_
+
+#include <deque>
+
+#include "base/basictypes.h"
+#include "base/memory/ref_counted.h"
+#include "base/memory/scoped_ptr.h"
+#include "base/memory/weak_ptr.h"
+#include "cc/output/context_provider.h"
+#include "cc/output/overlay_candidate_validator.h"
+#include "cc/output/software_output_device.h"
+
+namespace base { class SingleThreadTaskRunner; }
+
+namespace ui { struct LatencyInfo; }
+
+namespace gfx {
+class Rect;
+class Size;
+class Transform;
+}
+
+namespace cc {
+
+class CompositorFrame;
+class CompositorFrameAck;
+class OutputSurfaceClient;
+
+// Represents the output surface for a compositor. The compositor owns
+// and manages its destruction. Its lifetime is:
+// 1. Created on the main thread by the LayerTreeHost through its client.
+// 2. Passed to the compositor thread and bound to a client via BindToClient.
+// From here on, it will only be used on the compositor thread.
+// 3. If the 3D context is lost, then the compositor will delete the output
+// surface (on the compositor thread) and go back to step 1.
+class OutputSurface {
+ public:
+ enum {
+ DEFAULT_MAX_FRAMES_PENDING = 2
+ };
+
+ OutputSurface(const scoped_refptr<ContextProvider>& context_provider,
+ const scoped_refptr<ContextProvider>& worker_context_provider,
+ scoped_ptr<SoftwareOutputDevice> software_device);
+ OutputSurface(const scoped_refptr<ContextProvider>& context_provider,
+ const scoped_refptr<ContextProvider>& worker_context_provider);
+ explicit OutputSurface(
+ const scoped_refptr<ContextProvider>& context_provider);
+
+ explicit OutputSurface(scoped_ptr<SoftwareOutputDevice> software_device);
+
+ OutputSurface(const scoped_refptr<ContextProvider>& context_provider,
+ scoped_ptr<SoftwareOutputDevice> software_device);
+
+ virtual ~OutputSurface();
+
+ struct Capabilities {
+ Capabilities()
+ : delegated_rendering(false),
+ max_frames_pending(0),
+ deferred_gl_initialization(false),
+ draw_and_swap_full_viewport_every_frame(false),
+ adjust_deadline_for_parent(true),
+ uses_default_gl_framebuffer(true),
+ flipped_output_surface(false),
+ can_force_reclaim_resources(false) {}
+ bool delegated_rendering;
+ int max_frames_pending;
+ bool deferred_gl_initialization;
+ bool draw_and_swap_full_viewport_every_frame;
+ // This doesn't handle the <webview> case, but once BeginFrame is
+ // supported natively, we shouldn't need adjust_deadline_for_parent.
+ bool adjust_deadline_for_parent;
+ // Whether this output surface renders to the default OpenGL zero
+ // framebuffer or to an offscreen framebuffer.
+ bool uses_default_gl_framebuffer;
+ // Whether this OutputSurface is flipped or not.
+ bool flipped_output_surface;
+ // Whether ForceReclaimResources can be called to reclaim all resources
+ // from the OutputSurface.
+ bool can_force_reclaim_resources;
+ };
+
+ const Capabilities& capabilities() const {
+ return capabilities_;
+ }
+
+ virtual bool HasExternalStencilTest() const;
+
+ // Obtain the 3d context or the software device associated with this output
+ // surface. Either of these may return a null pointer, but not both.
+ // In the event of a lost context, the entire output surface should be
+ // recreated.
+ ContextProvider* context_provider() const { return context_provider_.get(); }
+ ContextProvider* worker_context_provider() const {
+ return worker_context_provider_.get();
+ }
+ SoftwareOutputDevice* software_device() const {
+ return software_device_.get();
+ }
+
+ // Called by the compositor on the compositor thread. This is a place where
+ // thread-specific data for the output surface can be initialized, since from
+ // this point on the output surface will only be used on the compositor
+ // thread.
+ virtual bool BindToClient(OutputSurfaceClient* client);
+
+ // This is called by the compositor on the compositor thread inside ReleaseGL
+ // in order to release the ContextProvider. Only used with
+ // deferred_gl_initialization capability.
+ void ReleaseContextProvider();
+
+ virtual void EnsureBackbuffer();
+ virtual void DiscardBackbuffer();
+
+ virtual void Reshape(const gfx::Size& size, float scale_factor);
+ virtual gfx::Size SurfaceSize() const;
+
+ // If supported, this causes a ReclaimResources for all resources that are
+ // currently in use.
+ virtual void ForceReclaimResources() {}
+
+ virtual void BindFramebuffer();
+
+ // The implementation may destroy or steal the contents of the CompositorFrame
+ // passed in (though it will not take ownership of the CompositorFrame
+ // itself). For successful swaps, the implementation must call
+ // OutputSurfaceClient::DidSwapBuffers() and eventually
+ // DidSwapBuffersComplete().
+ virtual void SwapBuffers(CompositorFrame* frame) = 0;
+ virtual void OnSwapBuffersComplete();
+
+ // Notifies frame-rate smoothness preference. If true, all non-critical
+ // processing should be stopped, or lowered in priority.
+ virtual void UpdateSmoothnessTakesPriority(bool prefer_smoothness) {}
+
+ bool HasClient() { return !!client_; }
+
+ // Get the class capable of informing cc of hardware overlay capability.
+ OverlayCandidateValidator* overlay_candidate_validator() const {
+ return overlay_candidate_validator_.get();
+ }
+
+ void DidLoseOutputSurface();
+
+ protected:
+ OutputSurfaceClient* client_;
+
+ // Synchronously initialize context3d and enter hardware mode.
+ // This can only supported in threaded compositing mode.
+ bool InitializeAndSetContext3d(
+ scoped_refptr<ContextProvider> context_provider,
+ scoped_refptr<ContextProvider> worker_context_provider);
+ void ReleaseGL();
+
+ void PostSwapBuffersComplete();
+
+ struct OutputSurface::Capabilities capabilities_;
+ scoped_refptr<ContextProvider> context_provider_;
+ scoped_refptr<ContextProvider> worker_context_provider_;
+ scoped_ptr<SoftwareOutputDevice> software_device_;
+ scoped_ptr<OverlayCandidateValidator> overlay_candidate_validator_;
+ gfx::Size surface_size_;
+ float device_scale_factor_;
+
+ void CommitVSyncParameters(base::TimeTicks timebase,
+ base::TimeDelta interval);
+
+ void SetNeedsRedrawRect(const gfx::Rect& damage_rect);
+ void ReclaimResources(const CompositorFrameAck* ack);
+ void SetExternalStencilTest(bool enabled);
+ void SetExternalDrawConstraints(
+ const gfx::Transform& transform,
+ const gfx::Rect& viewport,
+ const gfx::Rect& clip,
+ const gfx::Rect& viewport_rect_for_tile_priority,
+ const gfx::Transform& transform_for_tile_priority,
+ bool resourceless_software_draw);
+
+ private:
+ void SetUpContext3d();
+ void ResetContext3d();
+
+ bool external_stencil_test_enabled_;
+
+ base::WeakPtrFactory<OutputSurface> weak_ptr_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(OutputSurface);
+};
+
+} // namespace cc
+
+#endif // CC_OUTPUT_OUTPUT_SURFACE_H_
« no previous file with comments | « cc/output/gl_renderer_unittest.cc ('k') | cc/output/output_surface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698