Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(387)

Side by Side Diff: cc/resources/texture_mailbox.cc

Issue 15001027: [Aura] Added Support for rendering software compositor frames as cc::TextureLayers. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed DuplicateHandle on Windows. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/resources/texture_mailbox.h" 5 #include "cc/resources/texture_mailbox.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "third_party/khronos/GLES2/gl2.h" 8 #include "third_party/khronos/GLES2/gl2.h"
9 9
10 namespace cc { 10 namespace cc {
11 11
12 TextureMailbox::TextureMailbox() 12 TextureMailbox::TextureMailbox()
13 : sync_point_(0) { 13 : sync_point_(0),
14 handle_(base::SharedMemory::NULLHandle()) {
14 } 15 }
15 16
16 TextureMailbox::TextureMailbox( 17 TextureMailbox::TextureMailbox(
17 const std::string& mailbox_name, 18 const std::string& mailbox_name,
18 const ReleaseCallback& mailbox_callback) 19 const ReleaseCallback& callback)
19 : callback_(mailbox_callback), 20 : callback_(callback),
20 target_(GL_TEXTURE_2D), 21 target_(GL_TEXTURE_2D),
21 sync_point_(0) { 22 sync_point_(0),
22 DCHECK(mailbox_name.empty() == mailbox_callback.is_null()); 23 handle_(base::SharedMemory::NULLHandle()) {
24 DCHECK(mailbox_name.empty() == callback.is_null());
23 if (!mailbox_name.empty()) { 25 if (!mailbox_name.empty()) {
24 CHECK(mailbox_name.size() == sizeof(name_.name)); 26 CHECK(mailbox_name.size() == sizeof(name_.name));
25 name_.SetName(reinterpret_cast<const int8*>(mailbox_name.data())); 27 name_.SetName(reinterpret_cast<const int8*>(mailbox_name.data()));
26 } 28 }
27 } 29 }
28 30
29 TextureMailbox::TextureMailbox( 31 TextureMailbox::TextureMailbox(
30 const gpu::Mailbox& mailbox_name, 32 const gpu::Mailbox& mailbox_name,
31 const ReleaseCallback& mailbox_callback) 33 const ReleaseCallback& callback)
32 : callback_(mailbox_callback), 34 : callback_(callback),
33 target_(GL_TEXTURE_2D), 35 target_(GL_TEXTURE_2D),
34 sync_point_(0) { 36 sync_point_(0),
35 DCHECK(mailbox_name.IsZero() == mailbox_callback.is_null()); 37 handle_(base::SharedMemory::NULLHandle()) {
38 DCHECK(mailbox_name.IsZero() == callback.is_null());
36 name_.SetName(mailbox_name.name); 39 name_.SetName(mailbox_name.name);
37 } 40 }
38 41
39 TextureMailbox::TextureMailbox( 42 TextureMailbox::TextureMailbox(
40 const gpu::Mailbox& mailbox_name, 43 const gpu::Mailbox& mailbox_name,
41 const ReleaseCallback& mailbox_callback, 44 const ReleaseCallback& callback,
42 unsigned sync_point) 45 unsigned sync_point)
43 : callback_(mailbox_callback), 46 : callback_(callback),
44 target_(GL_TEXTURE_2D), 47 target_(GL_TEXTURE_2D),
45 sync_point_(sync_point) { 48 sync_point_(sync_point),
46 DCHECK(mailbox_name.IsZero() == mailbox_callback.is_null()); 49 handle_(base::SharedMemory::NULLHandle()) {
50 DCHECK(mailbox_name.IsZero() == callback.is_null());
47 name_.SetName(mailbox_name.name); 51 name_.SetName(mailbox_name.name);
48 } 52 }
49 53
50 TextureMailbox::TextureMailbox( 54 TextureMailbox::TextureMailbox(
51 const gpu::Mailbox& mailbox_name, 55 const gpu::Mailbox& mailbox_name,
52 const ReleaseCallback& mailbox_callback, 56 const ReleaseCallback& callback,
53 unsigned texture_target, 57 unsigned texture_target,
54 unsigned sync_point) 58 unsigned sync_point)
55 : callback_(mailbox_callback), 59 : callback_(callback),
56 target_(texture_target), 60 target_(texture_target),
57 sync_point_(sync_point) { 61 sync_point_(sync_point),
58 DCHECK(mailbox_name.IsZero() == mailbox_callback.is_null()); 62 handle_(base::SharedMemory::NULLHandle()) {
63 DCHECK(mailbox_name.IsZero() == callback.is_null());
59 name_.SetName(mailbox_name.name); 64 name_.SetName(mailbox_name.name);
60 } 65 }
61 66
67 TextureMailbox::TextureMailbox(
68 base::SharedMemoryHandle handle,
69 gfx::Size size,
70 const ReleaseCallback& callback)
71 : callback_(callback),
72 target_(GL_TEXTURE_2D),
73 sync_point_(0),
74 handle_(handle),
75 size_(size) {
76 }
77
62 TextureMailbox::~TextureMailbox() { 78 TextureMailbox::~TextureMailbox() {
63 } 79 }
64 80
65 bool TextureMailbox::Equals(const gpu::Mailbox& other) const { 81 bool TextureMailbox::Equals(const gpu::Mailbox& other) const {
66 return !memcmp(data(), other.name, sizeof(name_.name)); 82 return IsTexture() && !memcmp(data(), other.name, sizeof(name_.name));
83 }
84
85 bool TextureMailbox::Equals(base::SharedMemoryHandle handle) const {
86 return IsSharedMemory() && handle_ == handle;
67 } 87 }
68 88
69 bool TextureMailbox::Equals(const TextureMailbox& other) const { 89 bool TextureMailbox::Equals(const TextureMailbox& other) const {
70 return Equals(other.name()); 90 return Equals(other.name()) || Equals(other.handle());
danakj 2013/05/23 15:34:33 check that IsTexture() and IsSharedMemory() also m
slavi 2013/05/28 18:55:13 Done.
71 }
72
73 bool TextureMailbox::IsEmpty() const {
74 return name_.IsZero();
75 } 91 }
76 92
77 void TextureMailbox::RunReleaseCallback(unsigned sync_point, 93 void TextureMailbox::RunReleaseCallback(unsigned sync_point,
78 bool lost_resource) const { 94 bool lost_resource) const {
79 if (!callback_.is_null()) 95 if (!callback_.is_null())
80 callback_.Run(sync_point, lost_resource); 96 callback_.Run(sync_point, lost_resource);
81 } 97 }
82 98
83 void TextureMailbox::SetName(const gpu::Mailbox& other) { 99 void TextureMailbox::SetName(const gpu::Mailbox& other) {
84 name_.SetName(other.name); 100 name_.SetName(other.name);
101 handle_ = base::SharedMemory::NULLHandle();
102 }
103
104 void TextureMailbox::SetHandle(base::SharedMemoryHandle handle,
105 gfx::Size size) {
106 name_.SetZero();
107 handle_ = handle;
108 size_ = size;
85 } 109 }
86 110
87 } // namespace cc 111 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698