OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
84 return InterpolationLow; | 84 return InterpolationLow; |
85 | 85 |
86 // For images that are potentially animated we paint them at medium quality. | 86 // For images that are potentially animated we paint them at medium quality. |
87 if (image && image->maybeAnimated()) | 87 if (image && image->maybeAnimated()) |
88 return InterpolationMedium; | 88 return InterpolationMedium; |
89 | 89 |
90 return InterpolationDefault; | 90 return InterpolationDefault; |
91 } | 91 } |
92 | 92 |
93 ImageQualityController::~ImageQualityController() { | 93 ImageQualityController::~ImageQualityController() { |
94 // This will catch users of ImageQualityController that forget to call cleanUp
. | 94 // This will catch users of ImageQualityController that forget to call |
| 95 // cleanUp. |
95 ASSERT(!gImageQualityController || gImageQualityController->isEmpty()); | 96 ASSERT(!gImageQualityController || gImageQualityController->isEmpty()); |
96 } | 97 } |
97 | 98 |
98 ImageQualityController::ImageQualityController() | 99 ImageQualityController::ImageQualityController() |
99 : m_timer(wrapUnique(new Timer<ImageQualityController>( | 100 : m_timer(wrapUnique(new Timer<ImageQualityController>( |
100 this, | 101 this, |
101 &ImageQualityController::highQualityRepaintTimerFired))), | 102 &ImageQualityController::highQualityRepaintTimerFired))), |
102 m_frameTimeWhenTimerStarted(0.0) {} | 103 m_frameTimeWhenTimerStarted(0.0) {} |
103 | 104 |
104 void ImageQualityController::setTimer(std::unique_ptr<TimerBase> newTimer) { | 105 void ImageQualityController::setTimer(std::unique_ptr<TimerBase> newTimer) { |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 m_frameTimeWhenTimerStarted = lastFrameTimeMonotonic; | 161 m_frameTimeWhenTimerStarted = lastFrameTimeMonotonic; |
161 } | 162 } |
162 } | 163 } |
163 | 164 |
164 bool ImageQualityController::shouldPaintAtLowQuality( | 165 bool ImageQualityController::shouldPaintAtLowQuality( |
165 const LayoutObject& object, | 166 const LayoutObject& object, |
166 Image* image, | 167 Image* image, |
167 const void* layer, | 168 const void* layer, |
168 const LayoutSize& layoutSize, | 169 const LayoutSize& layoutSize, |
169 double lastFrameTimeMonotonic) { | 170 double lastFrameTimeMonotonic) { |
170 // If the image is not a bitmap image, then none of this is relevant and we ju
st paint at high | 171 // If the image is not a bitmap image, then none of this is relevant and we |
171 // quality. | 172 // just paint at high quality. |
172 if (!image || !image->isBitmapImage()) | 173 if (!image || !image->isBitmapImage()) |
173 return false; | 174 return false; |
174 | 175 |
175 if (!layer) | 176 if (!layer) |
176 return false; | 177 return false; |
177 | 178 |
178 if (object.style()->imageRendering() == ImageRenderingOptimizeContrast) | 179 if (object.style()->imageRendering() == ImageRenderingOptimizeContrast) |
179 return true; | 180 return true; |
180 | 181 |
181 if (LocalFrame* frame = object.frame()) { | 182 if (LocalFrame* frame = object.frame()) { |
(...skipping 14 matching lines...) Expand all Loading... |
196 bool isFirstResize = true; | 197 bool isFirstResize = true; |
197 if (innerMap) { | 198 if (innerMap) { |
198 LayerSizeMap::iterator j = innerMap->find(layer); | 199 LayerSizeMap::iterator j = innerMap->find(layer); |
199 if (j != innerMap->end()) { | 200 if (j != innerMap->end()) { |
200 isFirstResize = false; | 201 isFirstResize = false; |
201 oldSize = j->value; | 202 oldSize = j->value; |
202 } | 203 } |
203 } | 204 } |
204 | 205 |
205 if (layoutSize == image->size()) { | 206 if (layoutSize == image->size()) { |
206 // There is no scale in effect. If we had a scale in effect before, we can j
ust remove this object from the list. | 207 // There is no scale in effect. If we had a scale in effect before, we can |
| 208 // just remove this object from the list. |
207 removeLayer(object, innerMap, layer); | 209 removeLayer(object, innerMap, layer); |
208 return false; | 210 return false; |
209 } | 211 } |
210 | 212 |
211 // If an animated resize is active for this object, paint in low quality and k
ick the timer ahead. | 213 // If an animated resize is active for this object, paint in low quality and |
| 214 // kick the timer ahead. |
212 if (objectIsResizing) { | 215 if (objectIsResizing) { |
213 bool sizesChanged = oldSize != layoutSize; | 216 bool sizesChanged = oldSize != layoutSize; |
214 set(object, innerMap, layer, layoutSize, sizesChanged); | 217 set(object, innerMap, layer, layoutSize, sizesChanged); |
215 if (sizesChanged) | 218 if (sizesChanged) |
216 restartTimer(lastFrameTimeMonotonic); | 219 restartTimer(lastFrameTimeMonotonic); |
217 return true; | 220 return true; |
218 } | 221 } |
219 // If this is the first time resizing this image, or its size is the | 222 // If this is the first time resizing this image, or its size is the |
220 // same as the last resize, draw at high res, but record the paint | 223 // same as the last resize, draw at high res, but record the paint |
221 // size and set the timer. | 224 // size and set the timer. |
(...skipping 10 matching lines...) Expand all Loading... |
232 } | 235 } |
233 // This object has been resized to two different sizes while the timer | 236 // This object has been resized to two different sizes while the timer |
234 // is active, so draw at low quality, set the flag for animated resizes and | 237 // is active, so draw at low quality, set the flag for animated resizes and |
235 // the object to the list for high quality redraw. | 238 // the object to the list for high quality redraw. |
236 set(object, innerMap, layer, layoutSize, true); | 239 set(object, innerMap, layer, layoutSize, true); |
237 restartTimer(lastFrameTimeMonotonic); | 240 restartTimer(lastFrameTimeMonotonic); |
238 return true; | 241 return true; |
239 } | 242 } |
240 | 243 |
241 } // namespace blink | 244 } // namespace blink |
OLD | NEW |