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

Side by Side Diff: Source/core/fetch/ResourceLoadPriorityOptimizer.cpp

Issue 1246493002: Fix Resource Priorities and Scheduling (Blink Side) (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Cleaned up Created 5 years, 5 months 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 12 matching lines...) Expand all
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30 30
31 #include "config.h" 31 #include "config.h"
32 #include "core/fetch/ResourceLoadPriorityOptimizer.h" 32 #include "core/fetch/ResourceLoadPriorityOptimizer.h"
33 #include "core/frame/Settings.h"
33 #include "core/layout/LayoutObject.h" 34 #include "core/layout/LayoutObject.h"
34 #include "platform/TraceEvent.h" 35 #include "platform/TraceEvent.h"
35 36
36 #include "wtf/Vector.h" 37 #include "wtf/Vector.h"
37 38
38 namespace blink { 39 namespace blink {
39 40
40 ResourceLoadPriorityOptimizer* ResourceLoadPriorityOptimizer::resourceLoadPriori tyOptimizer() 41 ResourceLoadPriorityOptimizer* ResourceLoadPriorityOptimizer::resourceLoadPriori tyOptimizer()
41 { 42 {
42 DEFINE_STATIC_LOCAL(ResourceLoadPriorityOptimizer, s_renderLoadOptimizer, () ); 43 DEFINE_STATIC_LOCAL(ResourceLoadPriorityOptimizer, s_renderLoadOptimizer, () );
43 return &s_renderLoadOptimizer; 44 return &s_renderLoadOptimizer;
44 } 45 }
45 46
46 ResourceLoadPriorityOptimizer::ResourceAndVisibility::ResourceAndVisibility(Imag eResource* image, VisibilityStatus visibilityStatus, uint32_t screenArea) 47 ResourceLoadPriorityOptimizer::ResourceAndVisibility::ResourceAndVisibility(Imag eResource* image, VisibilityStatus visibilityStatus, uint32_t screenArea)
47 : imageResource(image) 48 : imageResource(image)
48 , status(visibilityStatus) 49 , status(visibilityStatus)
49 , screenArea(screenArea) 50 , screenArea(screenArea)
50 { 51 {
51 } 52 }
52 53
53 ResourceLoadPriorityOptimizer::ResourceAndVisibility::~ResourceAndVisibility() 54 ResourceLoadPriorityOptimizer::ResourceAndVisibility::~ResourceAndVisibility()
54 { 55 {
55 } 56 }
56 57
57 ResourceLoadPriorityOptimizer::ResourceLoadPriorityOptimizer() 58 ResourceLoadPriorityOptimizer::ResourceLoadPriorityOptimizer()
59 : m_fetchMode(-1)
58 { 60 {
59 } 61 }
60 62
61 ResourceLoadPriorityOptimizer::~ResourceLoadPriorityOptimizer() 63 ResourceLoadPriorityOptimizer::~ResourceLoadPriorityOptimizer()
62 { 64 {
63 } 65 }
64 66
65 void ResourceLoadPriorityOptimizer::addLayoutObject(LayoutObject* layoutObject) 67 void ResourceLoadPriorityOptimizer::addLayoutObject(LayoutObject* layoutObject)
66 { 68 {
69 if (m_fetchMode < 0 && layoutObject && layoutObject->document().settings()) {
70 m_fetchMode = layoutObject->document().settings()->resourceFetchMode();
71 }
67 m_objects.add(layoutObject); 72 m_objects.add(layoutObject);
68 layoutObject->setHasPendingResourceUpdate(true); 73 layoutObject->setHasPendingResourceUpdate(true);
69 } 74 }
70 75
71 void ResourceLoadPriorityOptimizer::removeLayoutObject(LayoutObject* layoutObjec t) 76 void ResourceLoadPriorityOptimizer::removeLayoutObject(LayoutObject* layoutObjec t)
72 { 77 {
73 if (!layoutObject->hasPendingResourceUpdate()) 78 if (!layoutObject->hasPendingResourceUpdate())
74 return; 79 return;
75 m_objects.remove(layoutObject); 80 m_objects.remove(layoutObject);
76 layoutObject->setHasPendingResourceUpdate(false); 81 layoutObject->setHasPendingResourceUpdate(false);
(...skipping 14 matching lines...) Expand all
91 96
92 updateImageResourcesWithLoadPriority(); 97 updateImageResourcesWithLoadPriority();
93 } 98 }
94 99
95 void ResourceLoadPriorityOptimizer::updateImageResourcesWithLoadPriority() 100 void ResourceLoadPriorityOptimizer::updateImageResourcesWithLoadPriority()
96 { 101 {
97 for (const auto& resource : m_imageResources) { 102 for (const auto& resource : m_imageResources) {
98 ResourceLoadPriority priority = resource.value->status == Visible ? 103 ResourceLoadPriority priority = resource.value->status == Visible ?
99 ResourceLoadPriorityLow : ResourceLoadPriorityVeryLow; 104 ResourceLoadPriorityLow : ResourceLoadPriorityVeryLow;
100 105
106 if (m_fetchMode == 2) {
107 priority = resource.value->status == Visible ?
108 ResourceLoadPriorityHigh : ResourceLoadPriorityLow;
109 }
110
101 if (priority != resource.value->imageResource->resourceRequest().priorit y()) { 111 if (priority != resource.value->imageResource->resourceRequest().priorit y()) {
102 resource.value->imageResource->mutableResourceRequest().setPriority( priority, resource.value->screenArea); 112 resource.value->imageResource->mutableResourceRequest().setPriority( priority, resource.value->screenArea);
103 resource.value->imageResource->didChangePriority(priority, resource. value->screenArea); 113 resource.value->imageResource->didChangePriority(priority, resource. value->screenArea);
104 } 114 }
105 } 115 }
106 m_imageResources.clear(); 116 m_imageResources.clear();
107 } 117 }
108 118
109 void ResourceLoadPriorityOptimizer::notifyImageResourceVisibility(ImageResource* img, VisibilityStatus status, const LayoutRect& screenRect) 119 void ResourceLoadPriorityOptimizer::notifyImageResourceVisibility(ImageResource* img, VisibilityStatus status, const LayoutRect& screenRect)
110 { 120 {
111 if (!img || img->isLoaded()) 121 if (!img || img->isLoaded())
112 return; 122 return;
113 123
114 int screenArea = 0; 124 int screenArea = 0;
115 if (!screenRect.isEmpty() && status == Visible) 125 if (!screenRect.isEmpty() && status == Visible)
116 screenArea += static_cast<uint32_t>(screenRect.width() * screenRect.heig ht()); 126 screenArea += static_cast<uint32_t>(screenRect.width() * screenRect.heig ht());
117 127
118 ImageResourceMap::AddResult result = m_imageResources.add(img->identifier(), adoptPtr(new ResourceAndVisibility(img, status, screenArea))); 128 ImageResourceMap::AddResult result = m_imageResources.add(img->identifier(), adoptPtr(new ResourceAndVisibility(img, status, screenArea)));
119 if (!result.isNewEntry && status == Visible) { 129 if (!result.isNewEntry && status == Visible) {
120 result.storedValue->value->status = Visible; 130 result.storedValue->value->status = Visible;
121 result.storedValue->value->screenArea += screenArea; 131 result.storedValue->value->screenArea += screenArea;
122 } 132 }
123 } 133 }
124 134
125 } 135 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698