Chromium Code Reviews| Index: services/gfx/compositor/render/painting.h |
| diff --git a/services/gfx/compositor/render/painting.h b/services/gfx/compositor/render/painting.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..50b470cc1f4d0ef31cb58dfcdb2900e220bd8351 |
| --- /dev/null |
| +++ b/services/gfx/compositor/render/painting.h |
| @@ -0,0 +1,106 @@ |
| +// Copyright 2015 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 SERVICES_GFX_COMPOSITOR_RENDER_PAINTING_H_ |
| +#define SERVICES_GFX_COMPOSITOR_RENDER_PAINTING_H_ |
| + |
| +#include <map> |
| +#include <memory> |
| + |
| +#include "base/macros.h" |
| +#include "mojo/skia/ganesh_context.h" |
| +#include "skia/ext/refptr.h" |
| + |
| +class SkImage; |
| +class SkPicture; |
| + |
| +namespace compositor { |
| + |
| +class PaintingCache; |
| +class RenderImage; |
| +class RenderLayer; |
| + |
| +// Provides a context for painting the contents of render tree. |
| +// |
| +// This scope should only be instantiated on the stack since it sets up |
| +// thread-local state for the duration of painting operations. |
| +class PaintingScope { |
| + public: |
| + PaintingScope(const mojo::skia::GaneshContext::Scope& ganesh_scope, |
| + PaintingCache* painting_cache); |
| + ~PaintingScope(); |
| + |
| + // Gets the Ganesh scope. |
|
abarth
2016/01/10 22:55:36
Kind of a useless comment.
jeffbrown
2016/01/16 03:28:32
Yeah, habits from documenting public APIs. I'll r
|
| + const mojo::skia::GaneshContext::Scope& ganesh_scope() const { |
| + return ganesh_scope_; |
| + } |
| + |
| + // Gets the painting cache. |
|
abarth
2016/01/10 22:55:36
Kind of a useless comment.
jeffbrown
2016/01/16 03:28:32
Done.
|
| + PaintingCache* painting_cache() const { return painting_cache_; } |
| + |
| + private: |
| + const mojo::skia::GaneshContext::Scope& ganesh_scope_; |
| + PaintingCache* const painting_cache_; |
|
abarth
2016/01/10 22:55:36
If this isn't nullable, consider "const PaintingCa
jeffbrown
2016/01/16 03:28:32
It can't be const though and non-const references
|
| + |
| + DISALLOW_COPY_AND_ASSIGN(PaintingScope); |
| +}; |
| + |
| +// Caches assets between painting invocations to improve efficiency. |
| +class PaintingCache { |
| + public: |
| + PaintingCache(); |
| + |
| + // The destructor must only be called after the cache has been cleared. |
| + ~PaintingCache(); |
| + |
| + // Clears the painting cache. |
| + // Since clearing the cache may cause textures to be deallocated, we require |
| + // that this work happen within a painting scope before the cache is |
| + // destroyed. |
| + void Clear(const PaintingScope& painting_scope); |
| + |
| + // Obtains an SkImage for the specified render image. |
| + // Reuses a previously cached image if possible. |
| + // Returns null if the image could not be allocated. |
| + skia::RefPtr<SkImage> GetSkImage(const PaintingScope& painting_scope, |
| + const std::shared_ptr<RenderImage>& image); |
| + |
| + // Obtains an SkPicture for the specified render layer. |
| + // Reuses a previously cached pcture if possible. |
| + // Result is never null. |
| + skia::RefPtr<SkPicture> GetSkPicture( |
| + const PaintingScope& painting_scope, |
| + const std::shared_ptr<RenderLayer>& layer); |
| + |
| + private: |
| + friend class PaintingScope; |
| + |
| + // Informs the cache that painting is about to begin. |
| + void BeginPainting(const PaintingScope& painting_scope); |
| + |
| + // Informs the cache that painting has finished. |
| + // This provides a signal to the cache that it may discard unused |
| + // cached resources that it no longer needs. |
| + void FinishPainting(const PaintingScope& painting_scope); |
| + |
| + bool painting_ = false; |
| + |
| + std::map<std::weak_ptr<RenderImage>, |
| + skia::RefPtr<SkImage>, |
| + std::owner_less<std::weak_ptr<RenderImage>>> used_images_; |
|
abarth
2016/01/10 22:55:36
No idea what this does.
map instead of unordered_
jeffbrown
2016/01/16 03:28:32
http://en.cppreference.com/w/cpp/memory/owner_less
jeffbrown
2016/01/16 03:43:40
Ahh sadly there's no std::hash<> defined for std::
|
| + std::map<std::weak_ptr<RenderImage>, |
| + skia::RefPtr<SkImage>, |
| + std::owner_less<std::weak_ptr<RenderImage>>> cached_images_; |
| + |
| + std::map<std::weak_ptr<RenderLayer>, |
| + skia::RefPtr<SkPicture>, |
| + std::owner_less<std::weak_ptr<RenderLayer>>> used_pictures_; |
| + std::map<std::weak_ptr<RenderLayer>, |
| + skia::RefPtr<SkPicture>, |
| + std::owner_less<std::weak_ptr<RenderLayer>>> cached_pictures_; |
| +}; |
| + |
| +} // namespace compositor |
| + |
| +#endif // SERVICES_GFX_COMPOSITOR_RENDER_PAINTING_H_ |