OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 , m_colorTransparent(CSSColorValue::create(Color::transparent)) | 46 , m_colorTransparent(CSSColorValue::create(Color::transparent)) |
47 , m_colorWhite(CSSColorValue::create(Color::white)) | 47 , m_colorWhite(CSSColorValue::create(Color::white)) |
48 , m_colorBlack(CSSColorValue::create(Color::black)) | 48 , m_colorBlack(CSSColorValue::create(Color::black)) |
49 { | 49 { |
50 m_identifierValueCache.resize(numCSSValueKeywords); | 50 m_identifierValueCache.resize(numCSSValueKeywords); |
51 m_pixelValueCache.resize(maximumCacheableIntegerValue + 1); | 51 m_pixelValueCache.resize(maximumCacheableIntegerValue + 1); |
52 m_percentValueCache.resize(maximumCacheableIntegerValue + 1); | 52 m_percentValueCache.resize(maximumCacheableIntegerValue + 1); |
53 m_numberValueCache.resize(maximumCacheableIntegerValue + 1); | 53 m_numberValueCache.resize(maximumCacheableIntegerValue + 1); |
54 } | 54 } |
55 | 55 |
56 RawPtr<CSSPrimitiveValue> CSSValuePool::createIdentifierValue(CSSValueID ident) | 56 CSSPrimitiveValue* CSSValuePool::createIdentifierValue(CSSValueID ident) |
57 { | 57 { |
58 if (ident <= 0) | 58 if (ident <= 0) |
59 return CSSPrimitiveValue::createIdentifier(ident); | 59 return CSSPrimitiveValue::createIdentifier(ident); |
60 | 60 |
61 if (!m_identifierValueCache[ident]) | 61 if (!m_identifierValueCache[ident]) |
62 m_identifierValueCache[ident] = CSSPrimitiveValue::createIdentifier(iden
t); | 62 m_identifierValueCache[ident] = CSSPrimitiveValue::createIdentifier(iden
t); |
63 return m_identifierValueCache[ident]; | 63 return m_identifierValueCache[ident]; |
64 } | 64 } |
65 | 65 |
66 RawPtr<CSSCustomIdentValue> CSSValuePool::createIdentifierValue(CSSPropertyID id
ent) | 66 CSSCustomIdentValue* CSSValuePool::createIdentifierValue(CSSPropertyID ident) |
67 { | 67 { |
68 return CSSCustomIdentValue::create(ident); | 68 return CSSCustomIdentValue::create(ident); |
69 } | 69 } |
70 | 70 |
71 RawPtr<CSSColorValue> CSSValuePool::createColorValue(RGBA32 rgbValue) | 71 CSSColorValue* CSSValuePool::createColorValue(RGBA32 rgbValue) |
72 { | 72 { |
73 // These are the empty and deleted values of the hash table. | 73 // These are the empty and deleted values of the hash table. |
74 if (rgbValue == Color::transparent) | 74 if (rgbValue == Color::transparent) |
75 return m_colorTransparent; | 75 return m_colorTransparent; |
76 if (rgbValue == Color::white) | 76 if (rgbValue == Color::white) |
77 return m_colorWhite; | 77 return m_colorWhite; |
78 // Just because it is common. | 78 // Just because it is common. |
79 if (rgbValue == Color::black) | 79 if (rgbValue == Color::black) |
80 return m_colorBlack; | 80 return m_colorBlack; |
81 | 81 |
82 if (!isMainThread()) { | 82 if (!isMainThread()) { |
83 // TODO (crbug.com/599659): Make CSS color parsing work properly in a | 83 // TODO (crbug.com/599659): Make CSS color parsing work properly in a |
84 // worker thread. | 84 // worker thread. |
85 // Currently, ColorValueCache is not thread-safe; so we avoid interactin
g | 85 // Currently, ColorValueCache is not thread-safe; so we avoid interactin
g |
86 // with it on a non-main thread. | 86 // with it on a non-main thread. |
87 return CSSColorValue::create(rgbValue); | 87 return CSSColorValue::create(rgbValue); |
88 } | 88 } |
89 | 89 |
90 // Just wipe out the cache and start rebuilding if it gets too big. | 90 // Just wipe out the cache and start rebuilding if it gets too big. |
91 const unsigned maximumColorCacheSize = 512; | 91 const unsigned maximumColorCacheSize = 512; |
92 if (m_colorValueCache.size() > maximumColorCacheSize) | 92 if (m_colorValueCache.size() > maximumColorCacheSize) |
93 m_colorValueCache.clear(); | 93 m_colorValueCache.clear(); |
94 | 94 |
95 RawPtr<CSSColorValue> dummyValue = nullptr; | 95 CSSColorValue* dummyValue = nullptr; |
96 ColorValueCache::AddResult entry = m_colorValueCache.add(rgbValue, dummyValu
e); | 96 ColorValueCache::AddResult entry = m_colorValueCache.add(rgbValue, dummyValu
e); |
97 if (entry.isNewEntry) | 97 if (entry.isNewEntry) |
98 entry.storedValue->value = CSSColorValue::create(rgbValue); | 98 entry.storedValue->value = CSSColorValue::create(rgbValue); |
99 | 99 |
100 return entry.storedValue->value; | 100 return entry.storedValue->value; |
101 } | 101 } |
102 | 102 |
103 RawPtr<CSSPrimitiveValue> CSSValuePool::createValue(double value, CSSPrimitiveVa
lue::UnitType type) | 103 CSSPrimitiveValue* CSSValuePool::createValue(double value, CSSPrimitiveValue::Un
itType type) |
104 { | 104 { |
105 if (std::isinf(value)) | 105 if (std::isinf(value)) |
106 value = 0; | 106 value = 0; |
107 | 107 |
108 if (value < 0 || value > maximumCacheableIntegerValue) | 108 if (value < 0 || value > maximumCacheableIntegerValue) |
109 return CSSPrimitiveValue::create(value, type); | 109 return CSSPrimitiveValue::create(value, type); |
110 | 110 |
111 int intValue = static_cast<int>(value); | 111 int intValue = static_cast<int>(value); |
112 if (value != intValue) | 112 if (value != intValue) |
113 return CSSPrimitiveValue::create(value, type); | 113 return CSSPrimitiveValue::create(value, type); |
(...skipping 10 matching lines...) Expand all Loading... |
124 case CSSPrimitiveValue::UnitType::Number: | 124 case CSSPrimitiveValue::UnitType::Number: |
125 case CSSPrimitiveValue::UnitType::Integer: | 125 case CSSPrimitiveValue::UnitType::Integer: |
126 if (!m_numberValueCache[intValue]) | 126 if (!m_numberValueCache[intValue]) |
127 m_numberValueCache[intValue] = CSSPrimitiveValue::create(value, CSSP
rimitiveValue::UnitType::Integer); | 127 m_numberValueCache[intValue] = CSSPrimitiveValue::create(value, CSSP
rimitiveValue::UnitType::Integer); |
128 return m_numberValueCache[intValue]; | 128 return m_numberValueCache[intValue]; |
129 default: | 129 default: |
130 return CSSPrimitiveValue::create(value, type); | 130 return CSSPrimitiveValue::create(value, type); |
131 } | 131 } |
132 } | 132 } |
133 | 133 |
134 RawPtr<CSSPrimitiveValue> CSSValuePool::createValue(const Length& value, const C
omputedStyle& style) | 134 CSSPrimitiveValue* CSSValuePool::createValue(const Length& value, const Computed
Style& style) |
135 { | 135 { |
136 return CSSPrimitiveValue::create(value, style.effectiveZoom()); | 136 return CSSPrimitiveValue::create(value, style.effectiveZoom()); |
137 } | 137 } |
138 | 138 |
139 RawPtr<CSSFontFamilyValue> CSSValuePool::createFontFamilyValue(const String& fam
ilyName) | 139 CSSFontFamilyValue* CSSValuePool::createFontFamilyValue(const String& familyName
) |
140 { | 140 { |
141 if (familyName.isNull()) | 141 if (familyName.isNull()) |
142 return CSSFontFamilyValue::create(familyName); | 142 return CSSFontFamilyValue::create(familyName); |
143 Member<CSSFontFamilyValue>& value = m_fontFamilyValueCache.add(familyName, n
ullptr).storedValue->value; | 143 Member<CSSFontFamilyValue>& value = m_fontFamilyValueCache.add(familyName, n
ullptr).storedValue->value; |
144 if (!value) | 144 if (!value) |
145 value = CSSFontFamilyValue::create(familyName); | 145 value = CSSFontFamilyValue::create(familyName); |
146 return value; | 146 return value; |
147 } | 147 } |
148 | 148 |
149 RawPtr<CSSValueList> CSSValuePool::createFontFaceValue(const AtomicString& strin
g) | 149 CSSValueList* CSSValuePool::createFontFaceValue(const AtomicString& string) |
150 { | 150 { |
151 // Just wipe out the cache and start rebuilding if it gets too big. | 151 // Just wipe out the cache and start rebuilding if it gets too big. |
152 const unsigned maximumFontFaceCacheSize = 128; | 152 const unsigned maximumFontFaceCacheSize = 128; |
153 if (m_fontFaceValueCache.size() > maximumFontFaceCacheSize) | 153 if (m_fontFaceValueCache.size() > maximumFontFaceCacheSize) |
154 m_fontFaceValueCache.clear(); | 154 m_fontFaceValueCache.clear(); |
155 | 155 |
156 Member<CSSValueList>& value = m_fontFaceValueCache.add(string, nullptr).stor
edValue->value; | 156 Member<CSSValueList>& value = m_fontFaceValueCache.add(string, nullptr).stor
edValue->value; |
157 if (!value) { | 157 if (!value) { |
158 RawPtr<CSSValue> parsedValue = CSSParser::parseSingleValue(CSSPropertyFo
ntFamily, string); | 158 CSSValue* parsedValue = CSSParser::parseSingleValue(CSSPropertyFontFamil
y, string); |
159 if (parsedValue && parsedValue->isValueList()) | 159 if (parsedValue && parsedValue->isValueList()) |
160 value = toCSSValueList(parsedValue.get()); | 160 value = toCSSValueList(parsedValue); |
161 } | 161 } |
162 return value; | 162 return value; |
163 } | 163 } |
164 | 164 |
165 DEFINE_TRACE(CSSValuePool) | 165 DEFINE_TRACE(CSSValuePool) |
166 { | 166 { |
167 visitor->trace(m_inheritedValue); | 167 visitor->trace(m_inheritedValue); |
168 visitor->trace(m_implicitInitialValue); | 168 visitor->trace(m_implicitInitialValue); |
169 visitor->trace(m_explicitInitialValue); | 169 visitor->trace(m_explicitInitialValue); |
170 visitor->trace(m_unsetValue); | 170 visitor->trace(m_unsetValue); |
171 visitor->trace(m_identifierValueCache); | 171 visitor->trace(m_identifierValueCache); |
172 visitor->trace(m_colorValueCache); | 172 visitor->trace(m_colorValueCache); |
173 visitor->trace(m_colorTransparent); | 173 visitor->trace(m_colorTransparent); |
174 visitor->trace(m_colorWhite); | 174 visitor->trace(m_colorWhite); |
175 visitor->trace(m_colorBlack); | 175 visitor->trace(m_colorBlack); |
176 visitor->trace(m_pixelValueCache); | 176 visitor->trace(m_pixelValueCache); |
177 visitor->trace(m_percentValueCache); | 177 visitor->trace(m_percentValueCache); |
178 visitor->trace(m_numberValueCache); | 178 visitor->trace(m_numberValueCache); |
179 visitor->trace(m_fontFaceValueCache); | 179 visitor->trace(m_fontFaceValueCache); |
180 visitor->trace(m_fontFamilyValueCache); | 180 visitor->trace(m_fontFamilyValueCache); |
181 } | 181 } |
182 | 182 |
183 } // namespace blink | 183 } // namespace blink |
OLD | NEW |