blob: 15b5202a15faaae559b839aa763de9c2cb9663c2 [file] [log] [blame]
// 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 SkiaTextureHolder_h
#define SkiaTextureHolder_h
#include "platform/PlatformExport.h"
#include "platform/graphics/TextureHolder.h"
namespace blink {
class PLATFORM_EXPORT SkiaTextureHolder final : public TextureHolder {
public:
~SkiaTextureHolder() override;
// Methods overriding TextureHolder
bool IsSkiaTextureHolder() final { return true; }
bool IsMailboxTextureHolder() final { return false; }
unsigned SharedContextId() final;
IntSize Size() const final {
return IntSize(image_->width(), image_->height());
}
bool CurrentFrameKnownToBeOpaque(Image::MetadataMode) final {
return image_->isOpaque();
}
sk_sp<SkImage> GetSkImage() final { return image_; }
void SetSharedContextId(unsigned context_id) final {
shared_context_id_ = context_id;
}
// When creating a AcceleratedStaticBitmap from a texture-backed SkImage, this
// function will be called to create a TextureHolder object.
SkiaTextureHolder(sk_sp<SkImage>);
// This function consumes the mailbox in the input parameter and turn it into
// a texture-backed SkImage.
SkiaTextureHolder(std::unique_ptr<TextureHolder>);
private:
void ReleaseImageThreadSafe();
// The m_image should always be texture-backed
sk_sp<SkImage> image_;
// Id of the shared context where m_image was created
unsigned shared_context_id_ = 0;
};
} // namespace blink
#endif // SkiaTextureHolder_h