// 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_RENDERER_H_ #define CC_RENDERER_H_ #include "base/basictypes.h" #include "cc/cc_export.h" #include "cc/layer_tree_host.h" #include "cc/managed_memory_policy.h" #include "cc/render_pass.h" namespace cc { class ScopedResource; class CC_EXPORT RendererClient { public: virtual const gfx::Size& deviceViewportSize() const = 0; virtual const LayerTreeSettings& settings() const = 0; virtual void didLoseContext() = 0; virtual void onSwapBuffersComplete() = 0; virtual void setFullRootLayerDamage() = 0; virtual void setManagedMemoryPolicy(const ManagedMemoryPolicy& policy) = 0; virtual void enforceManagedMemoryPolicy(const ManagedMemoryPolicy& policy) = 0; virtual bool hasImplThread() const = 0; protected: virtual ~RendererClient() { } }; class CC_EXPORT Renderer { public: // This enum defines the various resource pools for the ResourceProvider // where textures get allocated. enum ResourcePool { ImplPool = 1, // This pool is for textures that get allocated on the impl thread (e.g. RenderSurfaces). ContentPool // This pool is for textures that get allocated on the main thread (e.g. tiles). }; virtual ~Renderer() { } virtual const RendererCapabilities& capabilities() const = 0; const LayerTreeSettings& settings() const { return m_client->settings(); } gfx::Size viewportSize() { return m_client->deviceViewportSize(); } int viewportWidth() { return viewportSize().width(); } int viewportHeight() { return viewportSize().height(); } virtual void viewportChanged() { } virtual void decideRenderPassAllocationsForFrame(const RenderPassList&) { } virtual bool haveCachedResourcesForRenderPassId(RenderPass::Id) const; virtual void drawFrame(const RenderPassList&, const RenderPassIdHashMap&) = 0; // waits for rendering to finish virtual void finish() = 0; virtual void doNoOp() { } // puts backbuffer onscreen virtual bool swapBuffers() = 0; virtual void getFramebufferPixels(void *pixels, const gfx::Rect&) = 0; virtual bool isContextLost(); virtual void setVisible(bool) = 0; virtual void sendManagedMemoryStats(size_t bytesVisible, size_t bytesVisibleAndNearby, size_t bytesAllocated) = 0; protected: explicit Renderer(RendererClient* client) : m_client(client) { } RendererClient* m_client; DISALLOW_COPY_AND_ASSIGN(Renderer); }; } #endif // CC_RENDERER_H_