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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 static ImageQualityController* gImageQualityController = 0; | 42 static ImageQualityController* gImageQualityController = 0; |
43 | 43 |
44 ImageQualityController* ImageQualityController::imageQualityController() | 44 ImageQualityController* ImageQualityController::imageQualityController() |
45 { | 45 { |
46 if (!gImageQualityController) | 46 if (!gImageQualityController) |
47 gImageQualityController = new ImageQualityController; | 47 gImageQualityController = new ImageQualityController; |
48 | 48 |
49 return gImageQualityController; | 49 return gImageQualityController; |
50 } | 50 } |
51 | 51 |
52 void ImageQualityController::remove(RenderObject* renderer) | 52 void ImageQualityController::remove(LayoutObject* renderer) |
53 { | 53 { |
54 if (gImageQualityController) { | 54 if (gImageQualityController) { |
55 gImageQualityController->objectDestroyed(renderer); | 55 gImageQualityController->objectDestroyed(renderer); |
56 if (gImageQualityController->isEmpty()) { | 56 if (gImageQualityController->isEmpty()) { |
57 delete gImageQualityController; | 57 delete gImageQualityController; |
58 gImageQualityController = 0; | 58 gImageQualityController = 0; |
59 } | 59 } |
60 } | 60 } |
61 } | 61 } |
62 | 62 |
63 bool ImageQualityController::has(RenderObject* renderer) | 63 bool ImageQualityController::has(LayoutObject* renderer) |
64 { | 64 { |
65 return gImageQualityController && gImageQualityController->m_objectLayerSize
Map.contains(renderer); | 65 return gImageQualityController && gImageQualityController->m_objectLayerSize
Map.contains(renderer); |
66 } | 66 } |
67 | 67 |
68 InterpolationQuality ImageQualityController::chooseInterpolationQuality(Graphics
Context* context, RenderObject* object, Image* image, const void* layer, const L
ayoutSize& layoutSize) | 68 InterpolationQuality ImageQualityController::chooseInterpolationQuality(Graphics
Context* context, LayoutObject* object, Image* image, const void* layer, const L
ayoutSize& layoutSize) |
69 { | 69 { |
70 if (object->style()->imageRendering() == ImageRenderingPixelated) | 70 if (object->style()->imageRendering() == ImageRenderingPixelated) |
71 return InterpolationNone; | 71 return InterpolationNone; |
72 | 72 |
73 if (InterpolationDefault == InterpolationLow) | 73 if (InterpolationDefault == InterpolationLow) |
74 return InterpolationLow; | 74 return InterpolationLow; |
75 | 75 |
76 if (shouldPaintAtLowQuality(context, object, image, layer, layoutSize)) | 76 if (shouldPaintAtLowQuality(context, object, image, layer, layoutSize)) |
77 return InterpolationLow; | 77 return InterpolationLow; |
78 | 78 |
(...skipping 10 matching lines...) Expand all Loading... |
89 ASSERT(!gImageQualityController || gImageQualityController->isEmpty()); | 89 ASSERT(!gImageQualityController || gImageQualityController->isEmpty()); |
90 } | 90 } |
91 | 91 |
92 ImageQualityController::ImageQualityController() | 92 ImageQualityController::ImageQualityController() |
93 : m_timer(this, &ImageQualityController::highQualityRepaintTimerFired) | 93 : m_timer(this, &ImageQualityController::highQualityRepaintTimerFired) |
94 , m_animatedResizeIsActive(false) | 94 , m_animatedResizeIsActive(false) |
95 , m_liveResizeOptimizationIsActive(false) | 95 , m_liveResizeOptimizationIsActive(false) |
96 { | 96 { |
97 } | 97 } |
98 | 98 |
99 void ImageQualityController::removeLayer(RenderObject* object, LayerSizeMap* inn
erMap, const void* layer) | 99 void ImageQualityController::removeLayer(LayoutObject* object, LayerSizeMap* inn
erMap, const void* layer) |
100 { | 100 { |
101 if (innerMap) { | 101 if (innerMap) { |
102 innerMap->remove(layer); | 102 innerMap->remove(layer); |
103 if (innerMap->isEmpty()) | 103 if (innerMap->isEmpty()) |
104 objectDestroyed(object); | 104 objectDestroyed(object); |
105 } | 105 } |
106 } | 106 } |
107 | 107 |
108 void ImageQualityController::set(RenderObject* object, LayerSizeMap* innerMap, c
onst void* layer, const LayoutSize& size) | 108 void ImageQualityController::set(LayoutObject* object, LayerSizeMap* innerMap, c
onst void* layer, const LayoutSize& size) |
109 { | 109 { |
110 if (innerMap) | 110 if (innerMap) |
111 innerMap->set(layer, size); | 111 innerMap->set(layer, size); |
112 else { | 112 else { |
113 LayerSizeMap newInnerMap; | 113 LayerSizeMap newInnerMap; |
114 newInnerMap.set(layer, size); | 114 newInnerMap.set(layer, size); |
115 m_objectLayerSizeMap.set(object, newInnerMap); | 115 m_objectLayerSizeMap.set(object, newInnerMap); |
116 } | 116 } |
117 } | 117 } |
118 | 118 |
119 void ImageQualityController::objectDestroyed(RenderObject* object) | 119 void ImageQualityController::objectDestroyed(LayoutObject* object) |
120 { | 120 { |
121 m_objectLayerSizeMap.remove(object); | 121 m_objectLayerSizeMap.remove(object); |
122 if (m_objectLayerSizeMap.isEmpty()) { | 122 if (m_objectLayerSizeMap.isEmpty()) { |
123 m_animatedResizeIsActive = false; | 123 m_animatedResizeIsActive = false; |
124 m_timer.stop(); | 124 m_timer.stop(); |
125 } | 125 } |
126 } | 126 } |
127 | 127 |
128 void ImageQualityController::highQualityRepaintTimerFired(Timer<ImageQualityCont
roller>*) | 128 void ImageQualityController::highQualityRepaintTimerFired(Timer<ImageQualityCont
roller>*) |
129 { | 129 { |
(...skipping 13 matching lines...) Expand all Loading... |
143 } | 143 } |
144 | 144 |
145 m_liveResizeOptimizationIsActive = false; | 145 m_liveResizeOptimizationIsActive = false; |
146 } | 146 } |
147 | 147 |
148 void ImageQualityController::restartTimer() | 148 void ImageQualityController::restartTimer() |
149 { | 149 { |
150 m_timer.startOneShot(cLowQualityTimeThreshold, FROM_HERE); | 150 m_timer.startOneShot(cLowQualityTimeThreshold, FROM_HERE); |
151 } | 151 } |
152 | 152 |
153 bool ImageQualityController::shouldPaintAtLowQuality(GraphicsContext* context, R
enderObject* object, Image* image, const void *layer, const LayoutSize& layoutSi
ze) | 153 bool ImageQualityController::shouldPaintAtLowQuality(GraphicsContext* context, L
ayoutObject* object, Image* image, const void *layer, const LayoutSize& layoutSi
ze) |
154 { | 154 { |
155 // If the image is not a bitmap image, then none of this is relevant and we
just paint at high | 155 // If the image is not a bitmap image, then none of this is relevant and we
just paint at high |
156 // quality. | 156 // quality. |
157 if (!image || !image->isBitmapImage()) | 157 if (!image || !image->isBitmapImage()) |
158 return false; | 158 return false; |
159 | 159 |
160 if (object->style()->imageRendering() == ImageRenderingOptimizeContrast) | 160 if (object->style()->imageRendering() == ImageRenderingOptimizeContrast) |
161 return true; | 161 return true; |
162 | 162 |
163 if (RuntimeEnabledFeatures::slimmingPaintEnabled()) | 163 if (RuntimeEnabledFeatures::slimmingPaintEnabled()) |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
232 // This object has been resized to two different sizes while the timer | 232 // This object has been resized to two different sizes while the timer |
233 // is active, so draw at low quality, set the flag for animated resizes and | 233 // is active, so draw at low quality, set the flag for animated resizes and |
234 // the object to the list for high quality redraw. | 234 // the object to the list for high quality redraw. |
235 set(object, innerMap, layer, scaledLayoutSize); | 235 set(object, innerMap, layer, scaledLayoutSize); |
236 m_animatedResizeIsActive = true; | 236 m_animatedResizeIsActive = true; |
237 restartTimer(); | 237 restartTimer(); |
238 return true; | 238 return true; |
239 } | 239 } |
240 | 240 |
241 } // namespace blink | 241 } // namespace blink |
OLD | NEW |