15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// found in the LICENSE file. 4a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/compositor/owned_mailbox.h" 6a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 7a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "base/logging.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/browser/compositor/image_transport_factory.h" 9a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "content/common/gpu/client/gl_helper.h" 10a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 11a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace content { 12a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 13a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)OwnedMailbox::OwnedMailbox(GLHelper* gl_helper) 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) : texture_id_(0), gl_helper_(gl_helper) { 15a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) texture_id_ = gl_helper_->CreateTexture(); 165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mailbox_holder_ = gl_helper_->ProduceMailboxHolderFromTexture(texture_id_); 17a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) ImageTransportFactory::GetInstance()->AddObserver(this); 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)OwnedMailbox::~OwnedMailbox() { 215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (gl_helper_) 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Destroy(); 23a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 24a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 25a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void OwnedMailbox::UpdateSyncPoint(uint32 sync_point) { 26a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (sync_point) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mailbox_holder_.sync_point = sync_point; 28a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void OwnedMailbox::Destroy() { 315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ImageTransportFactory::GetInstance()->RemoveObserver(this); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gl_helper_->WaitSyncPoint(mailbox_holder_.sync_point); 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gl_helper_->DeleteTexture(texture_id_); 34a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) texture_id_ = 0; 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) mailbox_holder_ = gpu::MailboxHolder(); 36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) gl_helper_ = NULL; 37a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 38a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void OwnedMailbox::OnLostResources() { 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (gl_helper_) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) Destroy(); 425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} // namespace content 45