| Index: cc/resources/texture_mailbox.cc
|
| diff --git a/cc/resources/texture_mailbox.cc b/cc/resources/texture_mailbox.cc
|
| index 6900518967a3af3787b2b12d7faac00f4b289386..0d4787438f46b2d5a00488d74087cc42952c79f1 100644
|
| --- a/cc/resources/texture_mailbox.cc
|
| +++ b/cc/resources/texture_mailbox.cc
|
| @@ -11,16 +11,18 @@ namespace cc {
|
|
|
| TextureMailbox::TextureMailbox()
|
| : target_(GL_TEXTURE_2D),
|
| - sync_point_(0) {
|
| + sync_point_(0),
|
| + shared_memory_(NULL) {
|
| }
|
|
|
| TextureMailbox::TextureMailbox(
|
| const std::string& mailbox_name,
|
| - const ReleaseCallback& mailbox_callback)
|
| - : callback_(mailbox_callback),
|
| + const ReleaseCallback& callback)
|
| + : callback_(callback),
|
| target_(GL_TEXTURE_2D),
|
| - sync_point_(0) {
|
| - DCHECK(mailbox_name.empty() == mailbox_callback.is_null());
|
| + sync_point_(0),
|
| + shared_memory_(NULL) {
|
| + DCHECK(mailbox_name.empty() == callback.is_null());
|
| if (!mailbox_name.empty()) {
|
| CHECK(mailbox_name.size() == sizeof(name_.name));
|
| name_.SetName(reinterpret_cast<const int8*>(mailbox_name.data()));
|
| @@ -29,50 +31,70 @@ TextureMailbox::TextureMailbox(
|
|
|
| TextureMailbox::TextureMailbox(
|
| const gpu::Mailbox& mailbox_name,
|
| - const ReleaseCallback& mailbox_callback)
|
| - : callback_(mailbox_callback),
|
| + const ReleaseCallback& callback)
|
| + : callback_(callback),
|
| target_(GL_TEXTURE_2D),
|
| - sync_point_(0) {
|
| - DCHECK(mailbox_name.IsZero() == mailbox_callback.is_null());
|
| + sync_point_(0),
|
| + shared_memory_(NULL) {
|
| + DCHECK(mailbox_name.IsZero() == callback.is_null());
|
| name_.SetName(mailbox_name.name);
|
| }
|
|
|
| TextureMailbox::TextureMailbox(
|
| const gpu::Mailbox& mailbox_name,
|
| - const ReleaseCallback& mailbox_callback,
|
| + const ReleaseCallback& callback,
|
| unsigned sync_point)
|
| - : callback_(mailbox_callback),
|
| + : callback_(callback),
|
| target_(GL_TEXTURE_2D),
|
| - sync_point_(sync_point) {
|
| - DCHECK(mailbox_name.IsZero() == mailbox_callback.is_null());
|
| + sync_point_(sync_point),
|
| + shared_memory_(NULL) {
|
| + DCHECK(mailbox_name.IsZero() == callback.is_null());
|
| name_.SetName(mailbox_name.name);
|
| }
|
|
|
| TextureMailbox::TextureMailbox(
|
| const gpu::Mailbox& mailbox_name,
|
| - const ReleaseCallback& mailbox_callback,
|
| + const ReleaseCallback& callback,
|
| unsigned texture_target,
|
| unsigned sync_point)
|
| - : callback_(mailbox_callback),
|
| + : callback_(callback),
|
| target_(texture_target),
|
| - sync_point_(sync_point) {
|
| - DCHECK(mailbox_name.IsZero() == mailbox_callback.is_null());
|
| + sync_point_(sync_point),
|
| + shared_memory_(NULL) {
|
| + DCHECK(mailbox_name.IsZero() == callback.is_null());
|
| name_.SetName(mailbox_name.name);
|
| }
|
|
|
| -TextureMailbox::~TextureMailbox() {
|
| +TextureMailbox::TextureMailbox(
|
| + base::SharedMemory* shared_memory,
|
| + gfx::Size size,
|
| + const ReleaseCallback& callback)
|
| + : callback_(callback),
|
| + target_(GL_TEXTURE_2D),
|
| + sync_point_(0),
|
| + shared_memory_(shared_memory),
|
| + shared_memory_size_(size) {
|
| }
|
|
|
| -bool TextureMailbox::Equals(const gpu::Mailbox& other) const {
|
| - return !memcmp(data(), other.name, sizeof(name_.name));
|
| +TextureMailbox::~TextureMailbox() {
|
| }
|
|
|
| bool TextureMailbox::Equals(const TextureMailbox& other) const {
|
| - return Equals(other.name());
|
| + if (other.IsTexture())
|
| + return ContainsMailbox(other.name());
|
| + else if (other.IsSharedMemory())
|
| + return ContainsHandle(other.shared_memory_->handle());
|
| +
|
| + DCHECK(!other.IsValid());
|
| + return !IsValid();
|
| }
|
|
|
| -bool TextureMailbox::IsEmpty() const {
|
| - return name_.IsZero();
|
| +bool TextureMailbox::ContainsMailbox(const gpu::Mailbox& other) const {
|
| + return IsTexture() && !memcmp(data(), other.name, sizeof(name_.name));
|
| +}
|
| +
|
| +bool TextureMailbox::ContainsHandle(base::SharedMemoryHandle handle) const {
|
| + return shared_memory_ && shared_memory_->handle() == handle;
|
| }
|
|
|
| void TextureMailbox::RunReleaseCallback(unsigned sync_point,
|
| @@ -82,7 +104,19 @@ void TextureMailbox::RunReleaseCallback(unsigned sync_point,
|
| }
|
|
|
| void TextureMailbox::SetName(const gpu::Mailbox& other) {
|
| + DCHECK(shared_memory_ == NULL);
|
| name_.SetName(other.name);
|
| }
|
|
|
| +TextureMailbox TextureMailbox::CopyWithNewCallback(
|
| + const ReleaseCallback& callback) const {
|
| + TextureMailbox result(*this);
|
| + result.callback_ = callback;
|
| + return result;
|
| +}
|
| +
|
| +size_t TextureMailbox::shared_memory_size_in_bytes() const {
|
| + return 4 * shared_memory_size_.GetArea();
|
| +}
|
| +
|
| } // namespace cc
|
|
|