diff options
author | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 22:43:41 +0000 |
---|---|---|
committer | enne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-10-12 22:43:41 +0000 |
commit | cd57cc5a246367c2558fefa04ae9eca8f4d545d2 (patch) | |
tree | a2235045e9c5e4ff028d641b76f5d01aa5461b26 /cc/prioritized_texture.cc | |
parent | 3fe7ba055be580443445895c0ee01ada3b628487 (diff) | |
download | chromium_src-cd57cc5a246367c2558fefa04ae9eca8f4d545d2.zip chromium_src-cd57cc5a246367c2558fefa04ae9eca8f4d545d2.tar.gz chromium_src-cd57cc5a246367c2558fefa04ae9eca8f4d545d2.tar.bz2 |
[cc] Rename all cc/ filenames to Chromium style
BUG=155413
Review URL: https://codereview.chromium.org/11122003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@161671 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'cc/prioritized_texture.cc')
-rw-r--r-- | cc/prioritized_texture.cc | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/cc/prioritized_texture.cc b/cc/prioritized_texture.cc new file mode 100644 index 0000000..2940e92 --- /dev/null +++ b/cc/prioritized_texture.cc @@ -0,0 +1,180 @@ +// Copyright 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "config.h" + +#include "CCPrioritizedTexture.h" + +#include "CCPrioritizedTextureManager.h" +#include "CCPriorityCalculator.h" +#include "CCProxy.h" +#include <algorithm> + +using namespace std; + +namespace cc { + +CCPrioritizedTexture::CCPrioritizedTexture(CCPrioritizedTextureManager* manager, IntSize size, GC3Denum format) + : m_size(size) + , m_format(format) + , m_bytes(0) + , m_priority(CCPriorityCalculator::lowestPriority()) + , m_isAbovePriorityCutoff(false) + , m_isSelfManaged(false) + , m_backing(0) + , m_manager(0) +{ + // m_manager is set in registerTexture() so validity can be checked. + ASSERT(format || size.isEmpty()); + if (format) + m_bytes = CCTexture::memorySizeBytes(size, format); + if (manager) + manager->registerTexture(this); +} + +CCPrioritizedTexture::~CCPrioritizedTexture() +{ + if (m_manager) + m_manager->unregisterTexture(this); +} + +void CCPrioritizedTexture::setTextureManager(CCPrioritizedTextureManager* manager) +{ + if (m_manager == manager) + return; + if (m_manager) + m_manager->unregisterTexture(this); + if (manager) + manager->registerTexture(this); +} + +void CCPrioritizedTexture::setDimensions(IntSize size, GC3Denum format) +{ + if (m_format != format || m_size != size) { + m_isAbovePriorityCutoff = false; + m_format = format; + m_size = size; + m_bytes = CCTexture::memorySizeBytes(size, format); + ASSERT(m_manager || !m_backing); + if (m_manager) + m_manager->returnBackingTexture(this); + } +} + +bool CCPrioritizedTexture::requestLate() +{ + if (!m_manager) + return false; + return m_manager->requestLate(this); +} + +bool CCPrioritizedTexture::backingResourceWasEvicted() const +{ + return m_backing ? m_backing->resourceHasBeenDeleted() : false; +} + +void CCPrioritizedTexture::acquireBackingTexture(CCResourceProvider* resourceProvider) +{ + ASSERT(m_isAbovePriorityCutoff); + if (m_isAbovePriorityCutoff) + m_manager->acquireBackingTextureIfNeeded(this, resourceProvider); +} + +CCResourceProvider::ResourceId CCPrioritizedTexture::resourceId() const +{ + if (m_backing) + return m_backing->id(); + return 0; +} + +void CCPrioritizedTexture::upload(CCResourceProvider* resourceProvider, + const uint8_t* image, const IntRect& imageRect, + const IntRect& sourceRect, const IntSize& destOffset) +{ + ASSERT(m_isAbovePriorityCutoff); + if (m_isAbovePriorityCutoff) + acquireBackingTexture(resourceProvider); + ASSERT(m_backing); + resourceProvider->upload(resourceId(), image, imageRect, sourceRect, destOffset); +} + +void CCPrioritizedTexture::link(Backing* backing) +{ + ASSERT(backing); + ASSERT(!backing->m_owner); + ASSERT(!m_backing); + + m_backing = backing; + m_backing->m_owner = this; +} + +void CCPrioritizedTexture::unlink() +{ + ASSERT(m_backing); + ASSERT(m_backing->m_owner == this); + + m_backing->m_owner = 0; + m_backing = 0; +} + +void CCPrioritizedTexture::setToSelfManagedMemoryPlaceholder(size_t bytes) +{ + setDimensions(IntSize(), GraphicsContext3D::RGBA); + setIsSelfManaged(true); + m_bytes = bytes; +} + +CCPrioritizedTexture::Backing::Backing(unsigned id, CCResourceProvider* resourceProvider, IntSize size, GC3Denum format) + : CCTexture(id, size, format) + , m_owner(0) + , m_priorityAtLastPriorityUpdate(CCPriorityCalculator::lowestPriority()) + , m_ownerExistedAtLastPriorityUpdate(false) + , m_wasAbovePriorityCutoffAtLastPriorityUpdate(false) + , m_resourceHasBeenDeleted(false) +#ifndef NDEBUG + , m_resourceProvider(resourceProvider) +#endif +{ +} + +CCPrioritizedTexture::Backing::~Backing() +{ + ASSERT(!m_owner); + ASSERT(m_resourceHasBeenDeleted); +} + +void CCPrioritizedTexture::Backing::deleteResource(CCResourceProvider* resourceProvider) +{ + ASSERT(CCProxy::isImplThread()); + ASSERT(!m_resourceHasBeenDeleted); +#ifndef NDEBUG + ASSERT(resourceProvider == m_resourceProvider); +#endif + + resourceProvider->deleteResource(id()); + setId(0); + m_resourceHasBeenDeleted = true; +} + +bool CCPrioritizedTexture::Backing::resourceHasBeenDeleted() const +{ + ASSERT(CCProxy::isImplThread()); + return m_resourceHasBeenDeleted; +} + +void CCPrioritizedTexture::Backing::updatePriority() +{ + ASSERT(CCProxy::isImplThread() && CCProxy::isMainThreadBlocked()); + if (m_owner) { + m_ownerExistedAtLastPriorityUpdate = true; + m_priorityAtLastPriorityUpdate = m_owner->requestPriority(); + m_wasAbovePriorityCutoffAtLastPriorityUpdate = m_owner->isAbovePriorityCutoff(); + } else { + m_ownerExistedAtLastPriorityUpdate = false; + m_priorityAtLastPriorityUpdate = CCPriorityCalculator::lowestPriority(); + m_wasAbovePriorityCutoffAtLastPriorityUpdate = false; + } +} + +} // namespace cc |