1/* 2 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above 9 * copyright notice, this list of conditions and the following 10 * disclaimer. 11 * 2. Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following 13 * disclaimer in the documentation and/or other materials 14 * provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY 17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE 20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 21 * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR 25 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF 26 * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27 * SUCH DAMAGE. 28 */ 29 30#include "config.h" 31 32#include "core/rendering/style/StyleCustomFilterProgramCache.h" 33 34#include "core/platform/graphics/filters/custom/CustomFilterProgramInfo.h" 35#include "core/rendering/style/StyleCustomFilterProgram.h" 36 37namespace WebCore { 38 39static CustomFilterProgramInfo programCacheKey(StyleCustomFilterProgram* program) 40{ 41 ASSERT(program->vertexShaderURL().isValid() || program->fragmentShaderURL().isValid()); 42 return CustomFilterProgramInfo(program->vertexShaderURL().string(), program->fragmentShaderURL().string(), 43 program->programType(), program->mixSettings(), program->meshType()); 44} 45 46PassOwnPtr<StyleCustomFilterProgramCache> StyleCustomFilterProgramCache::create() 47{ 48 return adoptPtr(new StyleCustomFilterProgramCache()); 49} 50 51StyleCustomFilterProgramCache::~StyleCustomFilterProgramCache() 52{ 53 // Make sure the programs are not calling back into this object. 54 for (CacheMap::iterator iter = m_cache.begin(), end = m_cache.end(); iter != end; ++iter) 55 iter->value->setCache(0); 56} 57 58StyleCustomFilterProgram* StyleCustomFilterProgramCache::lookup(const CustomFilterProgramInfo& programInfo) const 59{ 60 CacheMap::const_iterator iter = m_cache.find(programInfo); 61 return iter != m_cache.end() ? iter->value : 0; 62} 63 64StyleCustomFilterProgram* StyleCustomFilterProgramCache::lookup(StyleCustomFilterProgram* program) const 65{ 66 return lookup(programCacheKey(program)); 67} 68 69void StyleCustomFilterProgramCache::add(StyleCustomFilterProgram* program) 70{ 71 CustomFilterProgramInfo key = programCacheKey(program); 72 ASSERT(m_cache.find(key) == m_cache.end()); 73 m_cache.set(key, program); 74 program->setCache(this); 75} 76 77void StyleCustomFilterProgramCache::remove(StyleCustomFilterProgram* program) 78{ 79 CacheMap::iterator iter = m_cache.find(programCacheKey(program)); 80 ASSERT(iter != m_cache.end()); 81 m_cache.remove(iter); 82} 83 84 85} // namespace WebCore 86 87 88