Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(64)

Side by Side Diff: sky/engine/core/rendering/ImageQualityController.cpp

Issue 646273006: Get rid of ScrollView. (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: merge to ToT Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 85
86 return InterpolationDefault; 86 return InterpolationDefault;
87 } 87 }
88 88
89 ImageQualityController::~ImageQualityController() 89 ImageQualityController::~ImageQualityController()
90 { 90 {
91 // This will catch users of ImageQualityController that forget to call clean Up. 91 // This will catch users of ImageQualityController that forget to call clean Up.
92 ASSERT(!gImageQualityController || gImageQualityController->isEmpty()); 92 ASSERT(!gImageQualityController || gImageQualityController->isEmpty());
93 } 93 }
94 94
95 // FIXME(sky): m_liveResizeOptimizationIsActive is never set to true.
95 ImageQualityController::ImageQualityController() 96 ImageQualityController::ImageQualityController()
96 : m_timer(this, &ImageQualityController::highQualityRepaintTimerFired) 97 : m_timer(this, &ImageQualityController::highQualityRepaintTimerFired)
97 , m_animatedResizeIsActive(false) 98 , m_animatedResizeIsActive(false)
98 , m_liveResizeOptimizationIsActive(false) 99 , m_liveResizeOptimizationIsActive(false)
99 { 100 {
100 } 101 }
101 102
102 void ImageQualityController::removeLayer(RenderObject* object, LayerSizeMap* inn erMap, const void* layer) 103 void ImageQualityController::removeLayer(RenderObject* object, LayerSizeMap* inn erMap, const void* layer)
103 { 104 {
104 if (innerMap) { 105 if (innerMap) {
(...skipping 23 matching lines...) Expand all
128 } 129 }
129 } 130 }
130 131
131 void ImageQualityController::highQualityRepaintTimerFired(Timer<ImageQualityCont roller>*) 132 void ImageQualityController::highQualityRepaintTimerFired(Timer<ImageQualityCont roller>*)
132 { 133 {
133 if (!m_animatedResizeIsActive && !m_liveResizeOptimizationIsActive) 134 if (!m_animatedResizeIsActive && !m_liveResizeOptimizationIsActive)
134 return; 135 return;
135 m_animatedResizeIsActive = false; 136 m_animatedResizeIsActive = false;
136 137
137 for (ObjectLayerSizeMap::iterator it = m_objectLayerSizeMap.begin(); it != m _objectLayerSizeMap.end(); ++it) { 138 for (ObjectLayerSizeMap::iterator it = m_objectLayerSizeMap.begin(); it != m _objectLayerSizeMap.end(); ++it) {
138 if (LocalFrame* frame = it->key->document().frame()) {
139 // If this renderer's containing FrameView is in live resize, punt t he timer and hold back for now.
140 if (frame->view() && frame->view()->inLiveResize()) {
141 restartTimer();
142 return;
143 }
144 }
145 it->key->setShouldDoFullPaintInvalidation(true); 139 it->key->setShouldDoFullPaintInvalidation(true);
146 } 140 }
147 141
148 m_liveResizeOptimizationIsActive = false; 142 m_liveResizeOptimizationIsActive = false;
149 } 143 }
150 144
151 void ImageQualityController::restartTimer() 145 void ImageQualityController::restartTimer()
152 { 146 {
153 m_timer.startOneShot(cLowQualityTimeThreshold, FROM_HERE); 147 m_timer.startOneShot(cLowQualityTimeThreshold, FROM_HERE);
154 } 148 }
(...skipping 23 matching lines...) Expand all
178 172
179 const AffineTransform& currentTransform = context->getCTM(); 173 const AffineTransform& currentTransform = context->getCTM();
180 bool contextIsScaled = !currentTransform.isIdentityOrTranslationOrFlipped(); 174 bool contextIsScaled = !currentTransform.isIdentityOrTranslationOrFlipped();
181 175
182 // Make sure to use the unzoomed image size, since if a full page zoom is in effect, the image 176 // Make sure to use the unzoomed image size, since if a full page zoom is in effect, the image
183 // is actually being scaled. 177 // is actually being scaled.
184 LayoutSize scaledImageSize = currentTransform.mapSize(image->size()); 178 LayoutSize scaledImageSize = currentTransform.mapSize(image->size());
185 LayoutSize scaledLayoutSize = currentTransform.mapSize(roundedIntSize(layout Size)); 179 LayoutSize scaledLayoutSize = currentTransform.mapSize(roundedIntSize(layout Size));
186 180
187 // If the containing FrameView is being resized, paint at low quality until resizing is finished. 181 // If the containing FrameView is being resized, paint at low quality until resizing is finished.
188 if (LocalFrame* frame = object->document().frame()) { 182 if (m_liveResizeOptimizationIsActive) {
189 bool frameViewIsCurrentlyInLiveResize = frame->view() && frame->view()-> inLiveResize(); 183 // Live resize has ended, paint in HQ and remove this object from the li st.
190 if (frameViewIsCurrentlyInLiveResize) { 184 removeLayer(object, innerMap, layer);
191 set(object, innerMap, layer, scaledLayoutSize); 185 return false;
192 restartTimer();
193 m_liveResizeOptimizationIsActive = true;
194 return true;
195 }
196 if (m_liveResizeOptimizationIsActive) {
197 // Live resize has ended, paint in HQ and remove this object from th e list.
198 removeLayer(object, innerMap, layer);
199 return false;
200 }
201 } 186 }
202 187
203 // See crbug.com/382491. This test is insufficient to ensure that there is n o scale 188 // See crbug.com/382491. This test is insufficient to ensure that there is n o scale
204 // applied in the compositor, but it is probably adequate here. In the worst case we 189 // applied in the compositor, but it is probably adequate here. In the worst case we
205 // draw at high quality when we need not. 190 // draw at high quality when we need not.
206 if (!contextIsScaled && scaledLayoutSize == scaledImageSize) { 191 if (!contextIsScaled && scaledLayoutSize == scaledImageSize) {
207 // There is no scale in effect. If we had a scale in effect before, we c an just remove this object from the list. 192 // There is no scale in effect. If we had a scale in effect before, we c an just remove this object from the list.
208 removeLayer(object, innerMap, layer); 193 removeLayer(object, innerMap, layer);
209 return false; 194 return false;
210 } 195 }
(...skipping 21 matching lines...) Expand all
232 // This object has been resized to two different sizes while the timer 217 // 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 218 // is active, so draw at low quality, set the flag for animated resizes and
234 // the object to the list for high quality redraw. 219 // the object to the list for high quality redraw.
235 set(object, innerMap, layer, scaledLayoutSize); 220 set(object, innerMap, layer, scaledLayoutSize);
236 m_animatedResizeIsActive = true; 221 m_animatedResizeIsActive = true;
237 restartTimer(); 222 restartTimer();
238 return true; 223 return true;
239 } 224 }
240 225
241 } // namespace blink 226 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698