summaryrefslogtreecommitdiffstats
path: root/cc/prioritized_texture.cc
diff options
context:
space:
mode:
authorenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-12 22:43:41 +0000
committerenne@chromium.org <enne@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-12 22:43:41 +0000
commitcd57cc5a246367c2558fefa04ae9eca8f4d545d2 (patch)
treea2235045e9c5e4ff028d641b76f5d01aa5461b26 /cc/prioritized_texture.cc
parent3fe7ba055be580443445895c0ee01ada3b628487 (diff)
downloadchromium_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.cc180
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