Chromium Code Reviews| Index: third_party/WebKit/Source/platform/graphics/TextureHolder.h |
| diff --git a/third_party/WebKit/Source/platform/graphics/TextureHolder.h b/third_party/WebKit/Source/platform/graphics/TextureHolder.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..bc5fb09c7efec2a8d4a57e3fe21a9fdf74aaa525 |
| --- /dev/null |
| +++ b/third_party/WebKit/Source/platform/graphics/TextureHolder.h |
| @@ -0,0 +1,79 @@ |
| +// Copyright 2016 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 TextureHolder_h |
| +#define TextureHolder_h |
| + |
| +#include "gpu/command_buffer/common/mailbox.h" |
| +#include "gpu/command_buffer/common/sync_token.h" |
| +#include "platform/PlatformExport.h" |
| +#include "platform/WebTaskRunner.h" |
| +#include "platform/geometry/IntSize.h" |
| +#include "platform/graphics/Image.h" |
| +#include "third_party/skia/include/core/SkImage.h" |
| +#include "third_party/skia/include/core/SkRefCnt.h" |
| + |
| +namespace blink { |
| + |
| +class WebThread; |
| + |
| +class PLATFORM_EXPORT TextureHolder { |
| + public: |
| + virtual ~TextureHolder() {} |
| + |
| + // Methods overrided by all sub-classes |
| + virtual bool isSkiaTextureHolder() = 0; |
| + virtual bool isMailboxTextureHolder() = 0; |
| + virtual unsigned sharedContextId() = 0; |
| + virtual IntSize size() const = 0; |
| + virtual bool currentFrameKnownToBeOpaque(Image::MetadataMode) = 0; |
| + |
| + // Methods overrided by MailboxTextureHolder |
| + virtual gpu::Mailbox mailbox() { |
| + NOTREACHED(); |
| + return gpu::Mailbox(); |
| + } |
| + virtual gpu::SyncToken syncToken() { |
| + NOTREACHED(); |
| + return gpu::SyncToken(); |
| + } |
| + virtual void updateSyncToken(gpu::SyncToken) { NOTREACHED(); } |
| + |
| + // Methods overrided by SkiaTextureHolder |
| + virtual sk_sp<SkImage> skImage() { |
| + NOTREACHED(); |
| + return nullptr; |
| + } |
| + virtual void setSharedContextId(unsigned) { NOTREACHED(); } |
| + virtual void setImageThread(WebThread*) { NOTREACHED(); } |
| + virtual void setImageThreadTaskRunner(std::unique_ptr<WebTaskRunner>) { |
| + NOTREACHED(); |
| + } |
| + |
| + // Methods that have exactly the same impelmentation for all sub-classes |
| + WebThread* textureThread() { return m_textureThreadDoNotCall; } |
|
Justin Novosad
2016/11/08 19:38:54
This is never called, but it should be. make the d
xidachen
2016/11/08 20:30:58
Done.
|
| + void setTextureThread(WebThread* thread) { |
| + m_textureThreadDoNotCall = thread; |
|
Justin Novosad
2016/11/08 19:38:54
The only thing we ever do with this value, as far
xidachen
2016/11/08 20:30:58
Done.
|
| + } |
| + void setTextureThreadTaskRunner(std::unique_ptr<WebTaskRunner> taskRunner) { |
| + m_textureThreadTaskRunner = std::move(taskRunner); |
| + } |
| + |
| + protected: |
| + // Thread that |m_texture| in the AcceleratedStaticBitmapImage belongs to. Set |
| + // to null when |m_texture| belongs to the same thread as the |
| + // AcceleratedStaticBitmapImage. Should only be non-null after a transfer. |
| + // VERY IMPORTANT: Used for pointer comparisons only. DO NOT call any of its |
| + // API because that would potentially CRASH. |
| + WebThread* m_textureThreadDoNotCall = nullptr; |
| + // Keep a clone of the WebTaskRunner for m_textureThread. This is to handle |
| + // the case where |m_textureThread| goes out of scope, and we still need to |
| + // use |
| + // the WebTaskRunner for the |m_textureThread|. |
| + std::unique_ptr<WebTaskRunner> m_textureThreadTaskRunner; |
| +}; |
| + |
| +} // namespace blink |
| + |
| +#endif // TextureHolder_h |