BaseTileTexture.cpp revision ec182c75fb35d955a9115fbaf516f648a48ed0e1
1a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard/* 2a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * Copyright 2010, The Android Open Source Project 3a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * 4a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * Redistribution and use in source and binary forms, with or without 5a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * modification, are permitted provided that the following conditions 6a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * are met: 7a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * * Redistributions of source code must retain the above copyright 8a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * notice, this list of conditions and the following disclaimer. 9a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * * Redistributions in binary form must reproduce the above copyright 10a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * notice, this list of conditions and the following disclaimer in the 11a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * documentation and/or other materials provided with the distribution. 12a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * 13a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY 14a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 17a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard */ 25a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 26a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#include "config.h" 27ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenberger#include "BaseTileTexture.h" 288c3b4386c279f644e5e9d2c5769fe5a43c6cd0caNicolas Roard 29a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#include "BaseTile.h" 30da44133fe92ec11fa6b904c498e7e5cd23a43cbfNicolas Roard#include "ClassTracker.h" 3156338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger#include "DeleteTextureOperation.h" 32a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#include "GLUtils.h" 338c3b4386c279f644e5e9d2c5769fe5a43c6cd0caNicolas Roard#include "TilesManager.h" 34a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 35a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#define LOG_NDEBUG 1 36ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenberger#define LOG_TAG "BaseTileTexture.cpp" 37a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard#include <utils/Log.h> 38a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 39a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roardnamespace WebCore { 40a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 41ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek SollenbergerBaseTileTexture::BaseTileTexture(uint32_t w, uint32_t h) 42dab8d6ca15f21acf3089e18d85dc88f98d4417feTeng-Hui Zhu : DoubleBufferedTexture(eglGetCurrentContext(), SurfaceTextureMode) 43a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger , m_usedLevel(-1) 44a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger , m_owner(0) 4581ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard , m_delayedReleaseOwner(0) 4681ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard , m_delayedRelease(false) 47a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger , m_busy(false) 48a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard{ 49ac45fd040af509d8cc3470ad7f8dcdfe459d5c7cNicolas Roard m_size.set(w, h); 50da44133fe92ec11fa6b904c498e7e5cd23a43cbfNicolas Roard 51da44133fe92ec11fa6b904c498e7e5cd23a43cbfNicolas Roard#ifdef DEBUG_COUNT 52ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenberger ClassTracker::instance()->increment("BaseTileTexture"); 53da44133fe92ec11fa6b904c498e7e5cd23a43cbfNicolas Roard#endif 54e2919ef039a8489adf64e4a3d410681a691b757aNicolas Roard} 55e2919ef039a8489adf64e4a3d410681a691b757aNicolas Roard 56ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek SollenbergerBaseTileTexture::~BaseTileTexture() 57a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard{ 58dab8d6ca15f21acf3089e18d85dc88f98d4417feTeng-Hui Zhu if (m_sharedTextureMode == EglImageMode) { 59dab8d6ca15f21acf3089e18d85dc88f98d4417feTeng-Hui Zhu SharedTexture* textures[3] = { m_textureA, m_textureB, 0 }; 60dab8d6ca15f21acf3089e18d85dc88f98d4417feTeng-Hui Zhu destroyTextures(textures); 61dab8d6ca15f21acf3089e18d85dc88f98d4417feTeng-Hui Zhu } 62da44133fe92ec11fa6b904c498e7e5cd23a43cbfNicolas Roard#ifdef DEBUG_COUNT 63ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenberger ClassTracker::instance()->decrement("BaseTileTexture"); 64da44133fe92ec11fa6b904c498e7e5cd23a43cbfNicolas Roard#endif 65a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard} 66a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 67ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergervoid BaseTileTexture::destroyTextures(SharedTexture** textures) 6856338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger{ 6956338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger int x = 0; 708c3b4386c279f644e5e9d2c5769fe5a43c6cd0caNicolas Roard while (textures[x]) { 7156338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger // We need to delete the source texture and EGLImage in the texture 7256338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger // generation thread. In theory we should be able to delete the EGLImage 7356338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger // from either thread, but it currently throws an error if not deleted 7456338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger // in the same EGLContext from which it was created. 7556338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger textures[x]->lock(); 7656338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger DeleteTextureOperation* operation = new DeleteTextureOperation( 7756338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger textures[x]->getSourceTextureId(), textures[x]->getEGLImage()); 7856338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger textures[x]->unlock(); 7956338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger TilesManager::instance()->scheduleOperation(operation); 8056338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger x++; 8156338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger } 8256338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger} 8356338e6791747d7c23fe7fd4e216d7755a18fa43Derek Sollenberger 84ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek SollenbergerTextureInfo* BaseTileTexture::producerLock() 85a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard{ 86a1e806ed3b2d9e2727d08cc2a3958fce501f6f33Derek Sollenberger m_busyLock.lock(); 87a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger m_busy = true; 88a1e806ed3b2d9e2727d08cc2a3958fce501f6f33Derek Sollenberger m_busyLock.unlock(); 89a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger return DoubleBufferedTexture::producerLock(); 90a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard} 91a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 92ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergervoid BaseTileTexture::producerRelease() 93a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard{ 94a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger DoubleBufferedTexture::producerRelease(); 9581ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard setNotBusy(); 96a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger} 97a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger 98ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergervoid BaseTileTexture::producerReleaseAndSwap() 99a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger{ 100a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger DoubleBufferedTexture::producerReleaseAndSwap(); 10181ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard setNotBusy(); 10281ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard} 10381ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard 104ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergervoid BaseTileTexture::setNotBusy() 10581ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard{ 106a1e806ed3b2d9e2727d08cc2a3958fce501f6f33Derek Sollenberger android::Mutex::Autolock lock(m_busyLock); 107a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger m_busy = false; 10881ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard if (m_delayedRelease) { 109ae00657a9ec26c87440d4610c78914ee8bcd3088Ben Murdoch if (m_owner == m_delayedReleaseOwner) 11081ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard m_owner = 0; 111ae00657a9ec26c87440d4610c78914ee8bcd3088Ben Murdoch 11281ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard m_delayedRelease = false; 11381ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard m_delayedReleaseOwner = 0; 11481ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard } 1154847d42ed20cf1087003d0628aeb33b0d4720f04Nicolas Roard m_busyCond.signal(); 116a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger} 117a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger 118ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergerbool BaseTileTexture::busy() 1191a8134698fa0b94387482fb4b45341faa8fe6a38Nicolas Roard{ 1201a8134698fa0b94387482fb4b45341faa8fe6a38Nicolas Roard android::Mutex::Autolock lock(m_busyLock); 1211a8134698fa0b94387482fb4b45341faa8fe6a38Nicolas Roard return m_busy; 1221a8134698fa0b94387482fb4b45341faa8fe6a38Nicolas Roard} 1231a8134698fa0b94387482fb4b45341faa8fe6a38Nicolas Roard 124ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergervoid BaseTileTexture::producerUpdate(TextureInfo* textureInfo, const SkBitmap& bitmap) 125a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger{ 126a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger // no need to upload a texture since the bitmap is empty 127ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenberger if (!bitmap.width() && !bitmap.height()) { 128a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger producerRelease(); 129a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard return; 130a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger } 131a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 132ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenberger GLUtils::paintTextureWithBitmap(textureInfo, m_size, bitmap, 0, 0); 133e2919ef039a8489adf64e4a3d410681a691b757aNicolas Roard 134a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger producerReleaseAndSwap(); 135a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard} 136a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 137ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergerbool BaseTileTexture::acquire(TextureOwner* owner, bool force) 138a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard{ 13950e0a1d1948f6b53b9b6ea82f865812a7b42221bNicolas Roard if (m_owner == owner) { 14050e0a1d1948f6b53b9b6ea82f865812a7b42221bNicolas Roard if (m_delayedRelease) { 14150e0a1d1948f6b53b9b6ea82f865812a7b42221bNicolas Roard m_delayedRelease = false; 14250e0a1d1948f6b53b9b6ea82f865812a7b42221bNicolas Roard m_delayedReleaseOwner = 0; 14350e0a1d1948f6b53b9b6ea82f865812a7b42221bNicolas Roard } 144a52793c453c1512d0a18d4ae3108a975f998ae45Derek Sollenberger return true; 14550e0a1d1948f6b53b9b6ea82f865812a7b42221bNicolas Roard } 1461eb60a0116bc4fc78af4cb216b9ab2e11c10d4deDerek Sollenberger 1474847d42ed20cf1087003d0628aeb33b0d4720f04Nicolas Roard return setOwner(owner, force); 148211482b53e73a386e2aabb0d3acb92e0e7ea22d4Nicolas Roard} 149211482b53e73a386e2aabb0d3acb92e0e7ea22d4Nicolas Roard 150ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergerbool BaseTileTexture::tryAcquire(TextureOwner* owner, TiledPage* currentPage, TiledPage* nextPage) 15161d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck{ 15261d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck m_busyLock.lock(); 15361d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck if (!m_busy 15461d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck && m_owner 15561d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck && m_owner->page() != currentPage 15661d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck && m_owner->page() != nextPage) { 15761d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck m_busyLock.unlock(); 15861d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck return this->acquire(owner); 15961d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck } 16061d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck m_busyLock.unlock(); 16161d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck return false; 16261d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck} 16361d841295b182b0d6c9eab04af1c55b9218eaefbJohn Reck 164ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergerbool BaseTileTexture::setOwner(TextureOwner* owner, bool force) 165211482b53e73a386e2aabb0d3acb92e0e7ea22d4Nicolas Roard{ 1661eb60a0116bc4fc78af4cb216b9ab2e11c10d4deDerek Sollenberger // if the writable texture is busy (i.e. currently being written to) then we 1671eb60a0116bc4fc78af4cb216b9ab2e11c10d4deDerek Sollenberger // can't change the owner out from underneath that texture 16881ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard m_busyLock.lock(); 1694847d42ed20cf1087003d0628aeb33b0d4720f04Nicolas Roard while (m_busy && force) 1704847d42ed20cf1087003d0628aeb33b0d4720f04Nicolas Roard m_busyCond.wait(m_busyLock); 17181ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard bool busy = m_busy; 17281ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard m_busyLock.unlock(); 1734847d42ed20cf1087003d0628aeb33b0d4720f04Nicolas Roard 17481ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard if (!busy) { 17581ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard // if we are not busy we can try to remove the texture from the layer; 17681ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard // LayerAndroid::removeTexture() is protected by the same lock as 17781ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard // LayerAndroid::paintBitmapGL(), so either we execute removeTexture() 17881ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard // first and paintBitmapGL() will bail out, or we execute it after, 17981ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard // and paintBitmapGL() will mark the texture as busy before 18081ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard // relinquishing the lock. LayerAndroid::removeTexture() will call 181ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenberger // BaseTileTexture::release(), which will then do nothing 18281ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard // if the texture is busy and we then don't return true. 18381ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard bool proceed = true; 184245e0cdd9ea80915059080a2bedbb9ebb5cc646cNicolas Roard if (m_owner && m_owner != owner) 18581ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard proceed = m_owner->removeTexture(this); 18681ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard 18781ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard if (proceed) { 18881ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard m_owner = owner; 18981ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard return true; 19081ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard } 1917f124a5e488ed4d4af51f2f535b740c5dac37033Nicolas Roard } 1927f124a5e488ed4d4af51f2f535b740c5dac37033Nicolas Roard return false; 193a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard} 194a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard 195ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergerbool BaseTileTexture::release(TextureOwner* owner) 19690455eb70cca2df540942299b35bb3bd8261cb0bDerek Sollenberger{ 19781ec1fafcb2c1bc433ec34b6ae4ea78d1ea7d3a8Nicolas Roard android::Mutex::Autolock lock(m_busyLock); 198439cfed476441572caa4206a622e3ef3c188798bNicolas Roard if (m_owner != owner) 199439cfed476441572caa4206a622e3ef3c188798bNicolas Roard return false; 200439cfed476441572caa4206a622e3ef3c188798bNicolas Roard 201439cfed476441572caa4206a622e3ef3c188798bNicolas Roard if (!m_busy) { 202439cfed476441572caa4206a622e3ef3c188798bNicolas Roard m_owner = 0; 203439cfed476441572caa4206a622e3ef3c188798bNicolas Roard } else { 204439cfed476441572caa4206a622e3ef3c188798bNicolas Roard m_delayedRelease = true; 205439cfed476441572caa4206a622e3ef3c188798bNicolas Roard m_delayedReleaseOwner = owner; 2062879037f2d6c595b8c16e992462ce5ca60d8fdbaBen Murdoch } 207439cfed476441572caa4206a622e3ef3c188798bNicolas Roard return true; 20890455eb70cca2df540942299b35bb3bd8261cb0bDerek Sollenberger} 20990455eb70cca2df540942299b35bb3bd8261cb0bDerek Sollenberger 210ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergervoid BaseTileTexture::setTile(TextureInfo* info, int x, int y, 21167e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard float scale, unsigned int pictureCount) 21267e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard{ 21367e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard TextureTileInfo* textureInfo = m_texturesInfo.get(getWriteableTexture()); 21467e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard if (!textureInfo) { 21567e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard textureInfo = new TextureTileInfo(); 21667e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard } 21767e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard textureInfo->m_x = x; 21867e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard textureInfo->m_y = y; 21967e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard textureInfo->m_scale = scale; 22067e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard textureInfo->m_picture = pictureCount; 22167e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard m_texturesInfo.set(getWriteableTexture(), textureInfo); 22267e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard} 22367e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard 224ec182c75fb35d955a9115fbaf516f648a48ed0e1Derek Sollenbergerbool BaseTileTexture::readyFor(BaseTile* baseTile) 22567e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard{ 22667e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard TextureTileInfo* info = m_texturesInfo.get(getReadableTexture()); 22767e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard if (info && 22867e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard (info->m_x == baseTile->x()) && 22967e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard (info->m_y == baseTile->y()) && 23067e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard (info->m_scale == baseTile->scale()) && 23167e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard (info->m_picture == baseTile->lastPaintedPicture())) { 23267e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard return true; 23367e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard } 23467e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard return false; 23567e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard} 23667e4aa15702646d5ff50e9524f4e63eb9ed20122Nicolas Roard 237a5ffb7c279df240a07658953e1bd5df6d0480cb6Nicolas Roard} // namespace WebCore 238