OLD | NEW |
1 // Copyright 2017 The Chromium Authors. All rights reserved. | 1 // Copyright 2017 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "cc/ipc/copy_output_result_struct_traits.h" | 5 #include "cc/ipc/copy_output_result_struct_traits.h" |
6 | 6 |
| 7 void Release(cc::mojom::TextureMailboxReleaserPtr ptr, |
| 8 const gpu::SyncToken& sync_token, |
| 9 bool is_lost) { |
| 10 ptr->Release(sync_token, is_lost); |
| 11 } |
| 12 |
7 namespace mojo { | 13 namespace mojo { |
8 | 14 |
9 // static | 15 // static |
| 16 const SkBitmap& StructTraits<cc::mojom::CopyOutputResultDataView, |
| 17 std::unique_ptr<cc::CopyOutputResult>>:: |
| 18 bitmap(const std::unique_ptr<cc::CopyOutputResult>& result) { |
| 19 static SkBitmap* null_bitmap = new SkBitmap(); |
| 20 if (!result->bitmap_) |
| 21 return *null_bitmap; |
| 22 return *result->bitmap_; |
| 23 } |
| 24 |
| 25 // static |
| 26 cc::mojom::TextureMailboxReleaserPtr |
| 27 StructTraits<cc::mojom::CopyOutputResultDataView, |
| 28 std::unique_ptr<cc::CopyOutputResult>>:: |
| 29 releaser(const std::unique_ptr<cc::CopyOutputResult>& result) { |
| 30 if (result->release_callback_) { |
| 31 DCHECK(result->ptr_provider_); |
| 32 return result->ptr_provider_->GetTextureMailboxReleaser( |
| 33 std::move(result->release_callback_)); |
| 34 } else { |
| 35 return cc::mojom::TextureMailboxReleaserPtr(); |
| 36 } |
| 37 } |
| 38 |
| 39 // static |
10 bool StructTraits<cc::mojom::CopyOutputResultDataView, | 40 bool StructTraits<cc::mojom::CopyOutputResultDataView, |
11 std::unique_ptr<cc::CopyOutputResult>>:: | 41 std::unique_ptr<cc::CopyOutputResult>>:: |
12 Read(cc::mojom::CopyOutputResultDataView data, | 42 Read(cc::mojom::CopyOutputResultDataView data, |
13 std::unique_ptr<cc::CopyOutputResult>* out_p) { | 43 std::unique_ptr<cc::CopyOutputResult>* out_p) { |
14 auto result = cc::CopyOutputResult::CreateEmptyResult(); | 44 auto result = cc::CopyOutputResult::CreateEmptyResult(); |
15 | 45 |
16 if (!data.ReadSize(&result->size_)) | 46 if (!data.ReadSize(&result->size_)) |
17 return false; | 47 return false; |
18 | 48 |
19 result->bitmap_ = base::MakeUnique<SkBitmap>(); | 49 result->bitmap_ = base::MakeUnique<SkBitmap>(); |
20 if (!data.ReadBitmap(result->bitmap_.get())) | 50 if (!data.ReadBitmap(result->bitmap_.get())) |
21 return false; | 51 return false; |
22 | 52 |
23 if (!data.ReadTextureMailbox(&result->texture_mailbox_)) | 53 if (!data.ReadTextureMailbox(&result->texture_mailbox_)) |
24 return false; | 54 return false; |
25 | 55 |
| 56 auto releaser = data.TakeReleaser<cc::mojom::TextureMailboxReleaserPtr>(); |
| 57 if (releaser) { |
| 58 result->release_callback_ = cc::SingleReleaseCallback::Create( |
| 59 base::Bind(Release, base::Passed(&releaser))); |
| 60 } |
| 61 |
26 *out_p = std::move(result); | 62 *out_p = std::move(result); |
27 | 63 |
28 return true; | 64 return true; |
29 } | 65 } |
30 | 66 |
31 // static | |
32 const SkBitmap& StructTraits<cc::mojom::CopyOutputResultDataView, | |
33 std::unique_ptr<cc::CopyOutputResult>>:: | |
34 bitmap(const std::unique_ptr<cc::CopyOutputResult>& result) { | |
35 static SkBitmap* null_bitmap = new SkBitmap(); | |
36 if (!result->bitmap_) | |
37 return *null_bitmap; | |
38 return *result->bitmap_; | |
39 } | |
40 | |
41 } // namespace mojo | 67 } // namespace mojo |
OLD | NEW |