Chromium Code Reviews| Index: cc/ipc/copy_output_result_struct_traits.cc |
| diff --git a/cc/ipc/copy_output_result_struct_traits.cc b/cc/ipc/copy_output_result_struct_traits.cc |
| index 0398fe115cd52463b56fbf2a1a1540d3d96b2935..851f9480b83b5be663bac99668861c4abc22ebae 100644 |
| --- a/cc/ipc/copy_output_result_struct_traits.cc |
| +++ b/cc/ipc/copy_output_result_struct_traits.cc |
| @@ -4,9 +4,76 @@ |
| #include "cc/ipc/copy_output_result_struct_traits.h" |
| +#include "mojo/public/cpp/bindings/strong_binding.h" |
| + |
| +namespace { |
| + |
| +class TextureMailboxReleaserImpl : public cc::mojom::TextureMailboxReleaser { |
| + public: |
| + TextureMailboxReleaserImpl( |
| + std::unique_ptr<cc::SingleReleaseCallback> release_callback) |
| + : release_callback_(std::move(release_callback)) {} |
| + |
| + // mojom::TextureMailboxReleaser implementation: |
| + void Release(const gpu::SyncToken& sync_token, bool is_lost) override { |
| + release_callback_->Run(sync_token, is_lost); |
| + } |
| + |
| + private: |
| + std::unique_ptr<cc::SingleReleaseCallback> release_callback_; |
| +}; |
| + |
| +void Release(cc::mojom::TextureMailboxReleaserPtr ptr, |
| + const gpu::SyncToken& sync_token, |
| + bool is_lost) { |
| + ptr->Release(sync_token, is_lost); |
| +} |
| + |
| +} // namespace |
| + |
| namespace mojo { |
| // static |
| +const SkBitmap& StructTraits<cc::mojom::CopyOutputResultDataView, |
| + std::unique_ptr<cc::CopyOutputResult>>:: |
| + bitmap(const std::unique_ptr<cc::CopyOutputResult>& result) { |
| + static SkBitmap* null_bitmap = new SkBitmap(); |
| + if (!result->bitmap_) |
| + return *null_bitmap; |
| + return *result->bitmap_; |
| +} |
| + |
| +// static |
| +cc::TextureMailboxWithRelease |
| +StructTraits<cc::mojom::CopyOutputResultDataView, |
| + std::unique_ptr<cc::CopyOutputResult>>:: |
| + texture_mailbox(const std::unique_ptr<cc::CopyOutputResult>& result) { |
| + cc::mojom::TextureMailboxReleaserPtr releaser; |
| + if (result->release_callback_) { |
| + auto impl = base::MakeUnique<TextureMailboxReleaserImpl>( |
| + std::move(result->release_callback_)); |
| + MakeStrongBinding(std::move(impl), MakeRequest(&releaser)); |
| + } |
| + return cc::TextureMailboxWithRelease{result->texture_mailbox_, releaser}; |
| +} |
| + |
| +/* |
|
danakj
2017/02/13 18:41:04
this would be deleted
|
| +// static |
| +cc::mojom::TextureMailboxReleaserPtr |
| +StructTraits<cc::mojom::CopyOutputResultDataView, |
| + std::unique_ptr<cc::CopyOutputResult>>:: |
| + releaser(const std::unique_ptr<cc::CopyOutputResult>& result) { |
| + if (!result->release_callback_) |
| + return {}; |
| + cc::mojom::TextureMailboxReleaserPtr releaser; |
| + auto impl = base::MakeUnique<TextureMailboxReleaserImpl>( |
| + std::move(result->release_callback_)); |
| + MakeStrongBinding(std::move(impl), MakeRequest(&releaser)); |
| + return releaser; |
| +} |
| +*/ |
| + |
| +// static |
| bool StructTraits<cc::mojom::CopyOutputResultDataView, |
| std::unique_ptr<cc::CopyOutputResult>>:: |
| Read(cc::mojom::CopyOutputResultDataView data, |
| @@ -23,19 +90,24 @@ bool StructTraits<cc::mojom::CopyOutputResultDataView, |
| if (!data.ReadTextureMailbox(&result->texture_mailbox_)) |
| return false; |
| + auto releaser = data.TakeReleaser<cc::mojom::TextureMailboxReleaserPtr>(); |
|
danakj
2017/02/13 18:41:05
This won't work right? It should be using the Read
|
| + if (releaser) { |
| + result->release_callback_ = cc::SingleReleaseCallback::Create( |
| + base::Bind(Release, base::Passed(&releaser))); |
| + } |
| + |
| *out_p = std::move(result); |
| return true; |
| } |
| // static |
| -const SkBitmap& StructTraits<cc::mojom::CopyOutputResultDataView, |
| - std::unique_ptr<cc::CopyOutputResult>>:: |
| - bitmap(const std::unique_ptr<cc::CopyOutputResult>& result) { |
| - static SkBitmap* null_bitmap = new SkBitmap(); |
| - if (!result->bitmap_) |
| - return *null_bitmap; |
| - return *result->bitmap_; |
| +bool StructTraits<cc::mojom::TextureMailboxWithReleaseDataView, |
| + std::unique_ptr<cc::TextureMailboxWithRelease>>:: |
| + Read(cc::mojom::TextureMailboxWithReleaseDataView data, |
| + cc::TextureMailboxWithRelease* out_p) { |
| + *out_p = data.TakeReleaser<cc::mojom::TextureMailboxReleaserPtr>(); |
| + return *data.ReadTextureMailbox(&out.texture_mailbox); |
| } |
| } // namespace mojo |