Changeset 219231 in webkit
- Timestamp:
- Jul 6, 2017 7:44:15 PM (7 years ago)
- Location:
- trunk/Source
- Files:
-
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r219230 r219231 1 2017-07-06 Chris Dumez <cdumez@apple.com> 2 3 Drop unused ResourceLoadStatistics members 4 https://bugs.webkit.org/show_bug.cgi?id=174226 5 6 Reviewed by Brent Fulgham. 7 8 * loader/ResourceLoadObserver.cpp: 9 (WebCore::ResourceLoadObserver::logFrameNavigation): 10 (WebCore::ResourceLoadObserver::logSubresourceLoading): 11 (WebCore::ResourceLoadObserver::logWebSocketLoading): 12 (WebCore::ResourceLoadObserver::isPrevalentResource): Deleted. 13 * loader/ResourceLoadObserver.h: 14 * loader/ResourceLoadStatistics.cpp: 15 (WebCore::ResourceLoadStatistics::encode): 16 (WebCore::ResourceLoadStatistics::decode): 17 (WebCore::ResourceLoadStatistics::toString): 18 (WebCore::ResourceLoadStatistics::merge): 19 * loader/ResourceLoadStatistics.h: 20 1 21 2017-07-06 Youenn Fablet <youenn@apple.com> 2 22 -
trunk/Source/WebCore/loader/DocumentLoader.cpp
r219099 r219231 521 521 ASSERT(topFrame.document()); 522 522 523 ResourceLoadObserver::shared().logFrameNavigation(*m_frame, topFrame, newRequest , redirectResponse);523 ResourceLoadObserver::shared().logFrameNavigation(*m_frame, topFrame, newRequest); 524 524 525 525 // Update cookie policy base URL as URL changes, except for subframes, which use the -
trunk/Source/WebCore/loader/ResourceLoadObserver.cpp
r219207 r219231 80 80 } 81 81 82 void ResourceLoadObserver::logFrameNavigation(const Frame& frame, const Frame& topFrame, const ResourceRequest& newRequest , const ResourceResponse& redirectResponse)82 void ResourceLoadObserver::logFrameNavigation(const Frame& frame, const Frame& topFrame, const ResourceRequest& newRequest) 83 83 { 84 84 ASSERT(frame.document()); … … 89 89 return; 90 90 91 bool isRedirect = is3xxRedirect(redirectResponse);92 bool isMainFrame = frame.isMainFrame();93 91 auto& sourceURL = frame.document()->url(); 94 92 auto& targetURL = newRequest.url(); … … 111 109 return; 112 110 113 auto targetStatistics = takeResourceStatisticsForPrimaryDomain(targetPrimaryDomain);111 auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain); 114 112 115 113 // Always fire if we have previously removed data records for this domain 114 // FIXME: targetStatistics.dataRecordsRemoved is always 0 in WebCore as it gets populated in the UIProcess. 116 115 bool shouldCallNotificationCallback = targetStatistics.dataRecordsRemoved > 0; 117 116 118 if (isMainFrame) 119 targetStatistics.topFrameHasBeenNavigatedToBefore = true; 120 else { 121 targetStatistics.subframeHasBeenLoadedBefore = true; 122 117 if (!frame.isMainFrame()) { 123 118 auto subframeUnderTopFrameOriginsResult = targetStatistics.subframeUnderTopFrameOrigins.add(mainFramePrimaryDomain); 124 119 if (subframeUnderTopFrameOriginsResult.isNewEntry) 125 120 shouldCallNotificationCallback = true; 126 121 } 127 128 if (isRedirect) {129 auto& redirectingOriginResourceStatistics = ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);130 131 if (isPrevalentResource(targetPrimaryDomain))132 redirectingOriginResourceStatistics.redirectedToOtherPrevalentResourceOrigins.add(targetPrimaryDomain);133 134 if (isMainFrame) {135 ++targetStatistics.topFrameHasBeenRedirectedTo;136 ++redirectingOriginResourceStatistics.topFrameHasBeenRedirectedFrom;137 } else {138 ++targetStatistics.subframeHasBeenRedirectedTo;139 ++redirectingOriginResourceStatistics.subframeHasBeenRedirectedFrom;140 redirectingOriginResourceStatistics.subframeUniqueRedirectsTo.add(targetPrimaryDomain);141 142 ++targetStatistics.subframeSubResourceCount;143 }144 } else {145 if (sourcePrimaryDomain.isNull() || sourcePrimaryDomain.isEmpty() || sourcePrimaryDomain == "nullOrigin") {146 if (isMainFrame)147 ++targetStatistics.topFrameInitialLoadCount;148 else149 ++targetStatistics.subframeSubResourceCount;150 } else {151 auto& sourceOriginResourceStatistics = ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);152 153 if (isMainFrame) {154 ++sourceOriginResourceStatistics.topFrameHasBeenNavigatedFrom;155 ++targetStatistics.topFrameHasBeenNavigatedTo;156 } else {157 ++sourceOriginResourceStatistics.subframeHasBeenNavigatedFrom;158 ++targetStatistics.subframeHasBeenNavigatedTo;159 }160 }161 }162 163 m_resourceStatisticsMap.set(targetPrimaryDomain, WTFMove(targetStatistics));164 122 165 123 if (shouldCallNotificationCallback) … … 192 150 return; 193 151 194 auto targetStatistics = takeResourceStatisticsForPrimaryDomain(targetPrimaryDomain); 152 bool shouldCallNotificationCallback = false; 153 154 { 155 auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain); 156 157 // Always fire if we have previously removed data records for this domain 158 // FIXME: targetStatistics.dataRecordsRemoved is always 0 in WebCore as it gets populated in the UIProcess. 159 shouldCallNotificationCallback = targetStatistics.dataRecordsRemoved > 0; 160 161 auto subresourceUnderTopFrameOriginsResult = targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain); 162 if (subresourceUnderTopFrameOriginsResult.isNewEntry) 163 shouldCallNotificationCallback = true; 164 } 165 166 if (isRedirect) { 167 auto& redirectingOriginStatistics = ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain); 168 auto subresourceUniqueRedirectsToResult = redirectingOriginStatistics.subresourceUniqueRedirectsTo.add(targetPrimaryDomain); 169 if (subresourceUniqueRedirectsToResult.isNewEntry) 170 shouldCallNotificationCallback = true; 171 } 172 173 if (shouldCallNotificationCallback) 174 scheduleNotificationIfNeeded(); 175 } 176 177 void ResourceLoadObserver::logWebSocketLoading(const Frame* frame, const URL& targetURL) 178 { 179 // FIXME: Web sockets can run in detached frames. Decide how to count such connections. 180 // See LayoutTests/http/tests/websocket/construct-in-detached-frame.html 181 if (!frame) 182 return; 183 184 if (!shouldLog(frame->page())) 185 return; 186 187 auto& mainFrameURL = frame->mainFrame().document()->url(); 188 189 auto targetHost = targetURL.host(); 190 auto mainFrameHost = mainFrameURL.host(); 191 192 if (targetHost.isEmpty() || mainFrameHost.isEmpty() || targetHost == mainFrameHost) 193 return; 194 195 auto targetPrimaryDomain = primaryDomain(targetURL); 196 auto mainFramePrimaryDomain = primaryDomain(mainFrameURL); 197 198 if (targetPrimaryDomain == mainFramePrimaryDomain) 199 return; 200 201 auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain); 195 202 196 203 // Always fire if we have previously removed data records for this domain 204 // FIXME: targetStatistics.dataRecordsRemoved is always 0 in WebCore as it gets populated in the UIProcess. 197 205 bool shouldCallNotificationCallback = targetStatistics.dataRecordsRemoved > 0; 198 206 … … 200 208 if (subresourceUnderTopFrameOriginsResult.isNewEntry) 201 209 shouldCallNotificationCallback = true; 202 203 if (isRedirect) {204 auto& redirectingOriginStatistics = ensureResourceStatisticsForPrimaryDomain(sourcePrimaryDomain);205 206 if (isPrevalentResource(targetPrimaryDomain))207 redirectingOriginStatistics.redirectedToOtherPrevalentResourceOrigins.add(targetPrimaryDomain);208 209 ++redirectingOriginStatistics.subresourceHasBeenRedirectedFrom;210 ++targetStatistics.subresourceHasBeenRedirectedTo;211 212 auto subresourceUniqueRedirectsToResult = redirectingOriginStatistics.subresourceUniqueRedirectsTo.add(targetPrimaryDomain);213 if (subresourceUniqueRedirectsToResult.isNewEntry)214 shouldCallNotificationCallback = true;215 216 ++targetStatistics.subresourceHasBeenSubresourceCount;217 218 auto totalVisited = std::max(m_originsVisitedMap.size(), 1U);219 220 targetStatistics.subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited = static_cast<double>(targetStatistics.subresourceHasBeenSubresourceCount) / totalVisited;221 } else {222 ++targetStatistics.subresourceHasBeenSubresourceCount;223 224 auto totalVisited = std::max(m_originsVisitedMap.size(), 1U);225 226 targetStatistics.subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited = static_cast<double>(targetStatistics.subresourceHasBeenSubresourceCount) / totalVisited;227 }228 229 m_resourceStatisticsMap.set(targetPrimaryDomain, WTFMove(targetStatistics));230 231 if (shouldCallNotificationCallback)232 scheduleNotificationIfNeeded();233 }234 235 void ResourceLoadObserver::logWebSocketLoading(const Frame* frame, const URL& targetURL)236 {237 // FIXME: Web sockets can run in detached frames. Decide how to count such connections.238 // See LayoutTests/http/tests/websocket/construct-in-detached-frame.html239 if (!frame)240 return;241 242 if (!shouldLog(frame->page()))243 return;244 245 auto& mainFrameURL = frame->mainFrame().document()->url();246 247 auto targetHost = targetURL.host();248 auto mainFrameHost = mainFrameURL.host();249 250 if (targetHost.isEmpty() || mainFrameHost.isEmpty() || targetHost == mainFrameHost)251 return;252 253 auto targetPrimaryDomain = primaryDomain(targetURL);254 auto mainFramePrimaryDomain = primaryDomain(mainFrameURL);255 256 if (targetPrimaryDomain == mainFramePrimaryDomain)257 return;258 259 auto& targetStatistics = ensureResourceStatisticsForPrimaryDomain(targetPrimaryDomain);260 261 // Always fire if we have previously removed data records for this domain262 bool shouldCallNotificationCallback = targetStatistics.dataRecordsRemoved > 0;263 264 auto subresourceUnderTopFrameOriginsResult = targetStatistics.subresourceUnderTopFrameOrigins.add(mainFramePrimaryDomain);265 if (subresourceUnderTopFrameOriginsResult.isNewEntry)266 shouldCallNotificationCallback = true;267 268 ++targetStatistics.subresourceHasBeenSubresourceCount;269 270 auto totalVisited = std::max(m_originsVisitedMap.size(), 1U);271 272 targetStatistics.subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited = static_cast<double>(targetStatistics.subresourceHasBeenSubresourceCount) / totalVisited;273 210 274 211 if (shouldCallNotificationCallback) … … 311 248 } 312 249 313 ResourceLoadStatistics ResourceLoadObserver::takeResourceStatisticsForPrimaryDomain(const String& primaryDomain)314 {315 auto statististics = m_resourceStatisticsMap.take(primaryDomain);316 if (statististics.highLevelDomain.isNull())317 statististics.highLevelDomain = primaryDomain;318 ASSERT(statististics.highLevelDomain == primaryDomain);319 return statististics;320 }321 322 bool ResourceLoadObserver::isPrevalentResource(const String& primaryDomain) const323 {324 auto mapEntry = m_resourceStatisticsMap.find(primaryDomain);325 if (mapEntry == m_resourceStatisticsMap.end())326 return false;327 return mapEntry->value.isPrevalentResource;328 }329 330 250 void ResourceLoadObserver::scheduleNotificationIfNeeded() 331 251 { -
trunk/Source/WebCore/loader/ResourceLoadObserver.h
r219207 r219231 52 52 WEBCORE_EXPORT static ResourceLoadObserver& shared(); 53 53 54 void logFrameNavigation(const Frame& frame, const Frame& topFrame, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse);54 void logFrameNavigation(const Frame&, const Frame& topFrame, const ResourceRequest& newRequest); 55 55 void logSubresourceLoading(const Frame*, const ResourceRequest& newRequest, const ResourceResponse& redirectResponse); 56 56 void logWebSocketLoading(const Frame*, const URL&); … … 66 66 bool shouldLog(Page*) const; 67 67 ResourceLoadStatistics& ensureResourceStatisticsForPrimaryDomain(const String&); 68 ResourceLoadStatistics takeResourceStatisticsForPrimaryDomain(const String& primaryDomain);69 bool isPrevalentResource(const String& primaryDomain) const;70 68 71 69 void scheduleNotificationIfNeeded(); … … 76 74 WTF::Function<void (Vector<ResourceLoadStatistics>&&)> m_notificationCallback; 77 75 Timer m_notificationTimer; 78 HashMap<String, size_t> m_originsVisitedMap;79 76 }; 80 77 -
trunk/Source/WebCore/loader/ResourceLoadStatistics.cpp
r219010 r219231 56 56 encoder.encodeBool("grandfathered", grandfathered); 57 57 58 // Top frame stats 59 encoder.encodeBool("topFrameHasBeenNavigatedToBefore", topFrameHasBeenNavigatedToBefore); 60 encoder.encodeUInt32("topFrameHasBeenRedirectedTo", topFrameHasBeenRedirectedTo); 61 encoder.encodeUInt32("topFrameHasBeenRedirectedFrom", topFrameHasBeenRedirectedFrom); 62 encoder.encodeUInt32("topFrameInitialLoadCount", topFrameInitialLoadCount); 63 encoder.encodeUInt32("topFrameHasBeenNavigatedTo", topFrameHasBeenNavigatedTo); 64 encoder.encodeUInt32("topFrameHasBeenNavigatedFrom", topFrameHasBeenNavigatedFrom); 65 66 // Subframe stats 67 encoder.encodeBool("subframeHasBeenLoadedBefore", subframeHasBeenLoadedBefore); 68 encoder.encodeUInt32("subframeHasBeenRedirectedTo", subframeHasBeenRedirectedTo); 69 encoder.encodeUInt32("subframeHasBeenRedirectedFrom", subframeHasBeenRedirectedFrom); 70 encoder.encodeUInt32("subframeSubResourceCount", subframeSubResourceCount); 58 // Subframe stats 71 59 encodeHashCountedSet(encoder, "subframeUnderTopFrameOrigins", subframeUnderTopFrameOrigins); 72 encodeHashCountedSet(encoder, "subframeUniqueRedirectsTo", subframeUniqueRedirectsTo); 73 encoder.encodeUInt32("subframeHasBeenNavigatedTo", subframeHasBeenNavigatedTo); 74 encoder.encodeUInt32("subframeHasBeenNavigatedFrom", subframeHasBeenNavigatedFrom); 75 76 // Subresource stats 77 encoder.encodeUInt32("subresourceHasBeenRedirectedFrom", subresourceHasBeenRedirectedFrom); 78 encoder.encodeUInt32("subresourceHasBeenRedirectedTo", subresourceHasBeenRedirectedTo); 79 encoder.encodeUInt32("subresourceHasBeenSubresourceCount", subresourceHasBeenSubresourceCount); 80 encoder.encodeDouble("subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited", subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited); 60 61 // Subresource stats 81 62 encodeHashCountedSet(encoder, "subresourceUnderTopFrameOrigins", subresourceUnderTopFrameOrigins); 82 63 encodeHashCountedSet(encoder, "subresourceUniqueRedirectsTo", subresourceUniqueRedirectsTo); 83 64 84 65 // Prevalent Resource 85 encodeHashCountedSet(encoder, "redirectedToOtherPrevalentResourceOrigins", redirectedToOtherPrevalentResourceOrigins);86 66 encoder.encodeBool("isPrevalentResource", isPrevalentResource); 87 67 encoder.encodeUInt32("dataRecordsRemoved", dataRecordsRemoved); … … 104 84 } 105 85 106 bool ResourceLoadStatistics::decode(KeyedDecoder& decoder , unsigned version)86 bool ResourceLoadStatistics::decode(KeyedDecoder& decoder) 107 87 { 108 88 if (!decoder.decodeString("PrevalentResourceOrigin", highLevelDomain)) … … 113 93 return false; 114 94 115 // Top frame stats 116 if (!decoder.decodeBool("topFrameHasBeenNavigatedToBefore", topFrameHasBeenNavigatedToBefore)) 117 return false; 118 119 if (!decoder.decodeUInt32("topFrameHasBeenRedirectedTo", topFrameHasBeenRedirectedTo)) 120 return false; 121 122 if (!decoder.decodeUInt32("topFrameHasBeenRedirectedFrom", topFrameHasBeenRedirectedFrom)) 123 return false; 124 125 if (!decoder.decodeUInt32("topFrameInitialLoadCount", topFrameInitialLoadCount)) 126 return false; 127 128 if (!decoder.decodeUInt32("topFrameHasBeenNavigatedTo", topFrameHasBeenNavigatedTo)) 129 return false; 130 131 if (!decoder.decodeUInt32("topFrameHasBeenNavigatedFrom", topFrameHasBeenNavigatedFrom)) 132 return false; 133 134 // Subframe stats 135 if (!decoder.decodeBool("subframeHasBeenLoadedBefore", subframeHasBeenLoadedBefore)) 136 return false; 137 138 if (!decoder.decodeUInt32("subframeHasBeenRedirectedTo", subframeHasBeenRedirectedTo)) 139 return false; 140 141 if (!decoder.decodeUInt32("subframeHasBeenRedirectedFrom", subframeHasBeenRedirectedFrom)) 142 return false; 143 144 if (!decoder.decodeUInt32("subframeSubResourceCount", subframeSubResourceCount)) 145 return false; 146 95 // Subframe stats 147 96 decodeHashCountedSet(decoder, "subframeUnderTopFrameOrigins", subframeUnderTopFrameOrigins); 148 decodeHashCountedSet(decoder, "subframeUniqueRedirectsTo", subframeUniqueRedirectsTo); 149 150 if (!decoder.decodeUInt32("subframeHasBeenNavigatedTo", subframeHasBeenNavigatedTo)) 151 return false; 152 153 if (!decoder.decodeUInt32("subframeHasBeenNavigatedFrom", subframeHasBeenNavigatedFrom)) 154 return false; 155 156 // Subresource stats 157 if (!decoder.decodeUInt32("subresourceHasBeenRedirectedFrom", subresourceHasBeenRedirectedFrom)) 158 return false; 159 160 if (!decoder.decodeUInt32("subresourceHasBeenRedirectedTo", subresourceHasBeenRedirectedTo)) 161 return false; 162 163 if (!decoder.decodeUInt32("subresourceHasBeenSubresourceCount", subresourceHasBeenSubresourceCount)) 164 return false; 165 166 if (!decoder.decodeDouble("subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited", subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited)) 167 return false; 168 97 98 // Subresource stats 169 99 decodeHashCountedSet(decoder, "subresourceUnderTopFrameOrigins", subresourceUnderTopFrameOrigins); 170 100 decodeHashCountedSet(decoder, "subresourceUniqueRedirectsTo", subresourceUniqueRedirectsTo); 171 101 172 102 // Prevalent Resource 173 decodeHashCountedSet(decoder, "redirectedToOtherPrevalentResourceOrigins", redirectedToOtherPrevalentResourceOrigins);174 175 103 if (!decoder.decodeBool("isPrevalentResource", isPrevalentResource)) 176 104 return false; 177 105 178 if (version < 2)179 return true;180 181 106 if (!decoder.decodeUInt32("dataRecordsRemoved", dataRecordsRemoved)) 182 107 return false; 183 184 if (version < 3)185 return true;186 108 187 109 double mostRecentUserInteractionTimeAsDouble; … … 235 157 builder.append('\n'); 236 158 237 // Top frame stats 238 appendBoolean(builder, "topFrameHasBeenNavigatedToBefore", topFrameHasBeenNavigatedToBefore); 239 builder.append('\n'); 240 builder.appendLiteral(" topFrameHasBeenRedirectedTo: "); 241 builder.appendNumber(topFrameHasBeenRedirectedTo); 242 builder.append('\n'); 243 builder.appendLiteral(" topFrameHasBeenRedirectedFrom: "); 244 builder.appendNumber(topFrameHasBeenRedirectedFrom); 245 builder.append('\n'); 246 builder.appendLiteral(" topFrameInitialLoadCount: "); 247 builder.appendNumber(topFrameInitialLoadCount); 248 builder.append('\n'); 249 builder.appendLiteral(" topFrameHasBeenNavigatedTo: "); 250 builder.appendNumber(topFrameHasBeenNavigatedTo); 251 builder.append('\n'); 252 builder.appendLiteral(" topFrameHasBeenNavigatedFrom: "); 253 builder.appendNumber(topFrameHasBeenNavigatedFrom); 254 builder.append('\n'); 255 256 // Subframe stats 257 appendBoolean(builder, "subframeHasBeenLoadedBefore", subframeHasBeenLoadedBefore); 258 builder.append('\n'); 259 builder.appendLiteral(" subframeHasBeenRedirectedTo: "); 260 builder.appendNumber(subframeHasBeenRedirectedTo); 261 builder.append('\n'); 262 builder.appendLiteral(" subframeHasBeenRedirectedFrom: "); 263 builder.appendNumber(subframeHasBeenRedirectedFrom); 264 builder.append('\n'); 265 builder.appendLiteral(" subframeSubResourceCount: "); 266 builder.appendNumber(subframeSubResourceCount); 267 builder.append('\n'); 159 // Subframe stats 268 160 appendHashCountedSet(builder, "subframeUnderTopFrameOrigins", subframeUnderTopFrameOrigins); 269 appendHashCountedSet(builder, "subframeUniqueRedirectsTo", subframeUniqueRedirectsTo); 270 builder.appendLiteral(" subframeHasBeenNavigatedTo: "); 271 builder.appendNumber(subframeHasBeenNavigatedTo); 272 builder.append('\n'); 273 builder.appendLiteral(" subframeHasBeenNavigatedFrom: "); 274 builder.appendNumber(subframeHasBeenNavigatedFrom); 275 builder.append('\n'); 276 277 // Subresource stats 278 builder.appendLiteral(" subresourceHasBeenRedirectedFrom: "); 279 builder.appendNumber(subresourceHasBeenRedirectedFrom); 280 builder.append('\n'); 281 builder.appendLiteral(" subresourceHasBeenRedirectedTo: "); 282 builder.appendNumber(subresourceHasBeenRedirectedTo); 283 builder.append('\n'); 284 builder.appendLiteral(" subresourceHasBeenSubresourceCount: "); 285 builder.appendNumber(subresourceHasBeenSubresourceCount); 286 builder.append('\n'); 287 builder.appendLiteral(" subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited: "); 288 builder.appendNumber(subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited); 289 builder.append('\n'); 161 162 // Subresource stats 290 163 appendHashCountedSet(builder, "subresourceUnderTopFrameOrigins", subresourceUnderTopFrameOrigins); 291 164 appendHashCountedSet(builder, "subresourceUniqueRedirectsTo", subresourceUniqueRedirectsTo); 292 165 293 166 // Prevalent Resource 294 appendHashCountedSet(builder, "redirectedToOtherPrevalentResourceOrigins", redirectedToOtherPrevalentResourceOrigins);295 167 appendBoolean(builder, "isPrevalentResource", isPrevalentResource); 296 168 builder.appendLiteral(" dataRecordsRemoved: "); … … 332 204 grandfathered |= other.grandfathered; 333 205 334 // Top frame stats335 topFrameHasBeenRedirectedTo += other.topFrameHasBeenRedirectedTo;336 topFrameHasBeenRedirectedFrom += other.topFrameHasBeenRedirectedFrom;337 topFrameInitialLoadCount += other.topFrameInitialLoadCount;338 topFrameHasBeenNavigatedTo += other.topFrameHasBeenNavigatedTo;339 topFrameHasBeenNavigatedFrom += other.topFrameHasBeenNavigatedFrom;340 topFrameHasBeenNavigatedToBefore |= other.topFrameHasBeenNavigatedToBefore;341 342 206 // Subframe stats 343 207 mergeHashCountedSet(subframeUnderTopFrameOrigins, other.subframeUnderTopFrameOrigins); 344 subframeHasBeenRedirectedTo += other.subframeHasBeenRedirectedTo;345 subframeHasBeenRedirectedFrom += other.subframeHasBeenRedirectedFrom;346 mergeHashCountedSet(subframeUniqueRedirectsTo, other.subframeUniqueRedirectsTo);347 subframeSubResourceCount += other.subframeSubResourceCount;348 subframeHasBeenNavigatedTo += other.subframeHasBeenNavigatedTo;349 subframeHasBeenNavigatedFrom += other.subframeHasBeenNavigatedFrom;350 subframeHasBeenLoadedBefore |= other.subframeHasBeenLoadedBefore;351 208 352 209 // Subresource stats 353 210 mergeHashCountedSet(subresourceUnderTopFrameOrigins, other.subresourceUnderTopFrameOrigins); 354 subresourceHasBeenSubresourceCount += other.subresourceHasBeenSubresourceCount;355 subresourceHasBeenRedirectedFrom += other.subresourceHasBeenRedirectedFrom;356 subresourceHasBeenRedirectedTo += other.subresourceHasBeenRedirectedTo;357 211 mergeHashCountedSet(subresourceUniqueRedirectsTo, other.subresourceUniqueRedirectsTo); 358 212 359 213 // Prevalent resource stats 360 mergeHashCountedSet(redirectedToOtherPrevalentResourceOrigins, other.redirectedToOtherPrevalentResourceOrigins);361 214 isPrevalentResource |= other.isPrevalentResource; 362 215 dataRecordsRemoved += other.dataRecordsRemoved; -
trunk/Source/WebCore/loader/ResourceLoadStatistics.h
r219010 r219231 54 54 55 55 WEBCORE_EXPORT void encode(KeyedEncoder&) const; 56 WEBCORE_EXPORT bool decode(KeyedDecoder& , unsigned version);56 WEBCORE_EXPORT bool decode(KeyedDecoder&); 57 57 58 58 String toString() const; … … 67 67 WallTime mostRecentUserInteractionTime { WallTime::fromRawSeconds(-1) }; 68 68 bool grandfathered { false }; 69 70 // Top frame stats71 unsigned topFrameHasBeenRedirectedTo { 0 };72 unsigned topFrameHasBeenRedirectedFrom { 0 };73 unsigned topFrameInitialLoadCount { 0 };74 unsigned topFrameHasBeenNavigatedTo { 0 };75 unsigned topFrameHasBeenNavigatedFrom { 0 };76 bool topFrameHasBeenNavigatedToBefore { false };77 69 78 70 // Subframe stats 79 71 HashCountedSet<String> subframeUnderTopFrameOrigins; 80 unsigned subframeHasBeenRedirectedTo { 0 };81 unsigned subframeHasBeenRedirectedFrom { 0 };82 HashCountedSet<String> subframeUniqueRedirectsTo;83 unsigned subframeSubResourceCount { 0 };84 unsigned subframeHasBeenNavigatedTo { 0 };85 unsigned subframeHasBeenNavigatedFrom { 0 };86 bool subframeHasBeenLoadedBefore { false };87 72 88 73 // Subresource stats 89 74 HashCountedSet<String> subresourceUnderTopFrameOrigins; 90 unsigned subresourceHasBeenSubresourceCount { 0 };91 double subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited { 0.0 };92 unsigned subresourceHasBeenRedirectedFrom { 0 };93 unsigned subresourceHasBeenRedirectedTo { 0 };94 75 HashCountedSet<String> subresourceUniqueRedirectsTo; 95 76 96 77 // Prevalent resource stats 97 HashCountedSet<String> redirectedToOtherPrevalentResourceOrigins;98 78 bool isPrevalentResource { false }; 99 79 unsigned dataRecordsRemoved { 0 }; -
trunk/Source/WebKit2/ChangeLog
r219225 r219231 1 2017-07-06 Chris Dumez <cdumez@apple.com> 2 3 Drop unused ResourceLoadStatistics members 4 https://bugs.webkit.org/show_bug.cgi?id=174226 5 6 Reviewed by Brent Fulgham. 7 8 * Shared/WebCoreArgumentCoders.cpp: 9 (IPC::ArgumentCoder<ResourceLoadStatistics>::encode): 10 (IPC::ArgumentCoder<ResourceLoadStatistics>::decode): 11 * UIProcess/Storage/ResourceLoadStatisticsStore.cpp: 12 (WebKit::ResourceLoadStatisticsStore::readDataFromDecoder): 13 1 14 2017-07-06 Wenson Hsieh <wenson_hsieh@apple.com> 2 15 -
trunk/Source/WebKit2/Shared/WebCoreArgumentCoders.cpp
r218953 r219231 2248 2248 encoder << statistics.grandfathered; 2249 2249 2250 // Top frame stats2251 encoder << statistics.topFrameHasBeenNavigatedToBefore;2252 encoder << statistics.topFrameHasBeenRedirectedTo;2253 encoder << statistics.topFrameHasBeenRedirectedFrom;2254 encoder << statistics.topFrameInitialLoadCount;2255 encoder << statistics.topFrameHasBeenNavigatedTo;2256 encoder << statistics.topFrameHasBeenNavigatedFrom;2257 2258 2250 // Subframe stats 2259 encoder << statistics.subframeHasBeenLoadedBefore;2260 encoder << statistics.subframeHasBeenRedirectedTo;2261 encoder << statistics.subframeHasBeenRedirectedFrom;2262 encoder << statistics.subframeSubResourceCount;2263 2251 encoder << statistics.subframeUnderTopFrameOrigins; 2264 encoder << statistics.subframeUniqueRedirectsTo;2265 encoder << statistics.subframeHasBeenNavigatedTo;2266 encoder << statistics.subframeHasBeenNavigatedFrom;2267 2252 2268 2253 // Subresource stats 2269 encoder << statistics.subresourceHasBeenRedirectedFrom;2270 encoder << statistics.subresourceHasBeenRedirectedTo;2271 encoder << statistics.subresourceHasBeenSubresourceCount;2272 encoder << statistics.subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited;2273 2254 encoder << statistics.subresourceUnderTopFrameOrigins; 2274 2255 encoder << statistics.subresourceUniqueRedirectsTo; 2275 2256 2276 2257 // Prevalent Resource 2277 encoder << statistics.redirectedToOtherPrevalentResourceOrigins;2278 2258 encoder << statistics.isPrevalentResource; 2279 2259 encoder << statistics.dataRecordsRemoved; … … 2297 2277 return false; 2298 2278 2299 // Top frame stats2300 if (!decoder.decode(statistics.topFrameHasBeenNavigatedToBefore))2301 return false;2302 2303 if (!decoder.decode(statistics.topFrameHasBeenRedirectedTo))2304 return false;2305 2306 if (!decoder.decode(statistics.topFrameHasBeenRedirectedFrom))2307 return false;2308 2309 if (!decoder.decode(statistics.topFrameInitialLoadCount))2310 return false;2311 2312 if (!decoder.decode(statistics.topFrameHasBeenNavigatedTo))2313 return false;2314 2315 if (!decoder.decode(statistics.topFrameHasBeenNavigatedFrom))2316 return false;2317 2318 2279 // Subframe stats 2319 if (!decoder.decode(statistics.subframeHasBeenLoadedBefore))2320 return false;2321 2322 if (!decoder.decode(statistics.subframeHasBeenRedirectedTo))2323 return false;2324 2325 if (!decoder.decode(statistics.subframeHasBeenRedirectedFrom))2326 return false;2327 2328 if (!decoder.decode(statistics.subframeSubResourceCount))2329 return false;2330 2331 2280 if (!decoder.decode(statistics.subframeUnderTopFrameOrigins)) 2332 2281 return false; 2333 2334 if (!decoder.decode(statistics.subframeUniqueRedirectsTo))2335 return false;2336 2337 if (!decoder.decode(statistics.subframeHasBeenNavigatedTo))2338 return false;2339 2340 if (!decoder.decode(statistics.subframeHasBeenNavigatedFrom))2341 return false;2342 2282 2343 2283 // Subresource stats 2344 if (!decoder.decode(statistics.subresourceHasBeenRedirectedFrom))2345 return false;2346 2347 if (!decoder.decode(statistics.subresourceHasBeenRedirectedTo))2348 return false;2349 2350 if (!decoder.decode(statistics.subresourceHasBeenSubresourceCount))2351 return false;2352 2353 if (!decoder.decode(statistics.subresourceHasBeenSubresourceCountDividedByTotalNumberOfOriginsVisited))2354 return false;2355 2356 2284 if (!decoder.decode(statistics.subresourceUnderTopFrameOrigins)) 2357 2285 return false; … … 2361 2289 2362 2290 // Prevalent Resource 2363 if (!decoder.decode(statistics.redirectedToOtherPrevalentResourceOrigins))2364 return false;2365 2366 2291 if (!decoder.decode(statistics.isPrevalentResource)) 2367 2292 return false; -
trunk/Source/WebKit2/UIProcess/Storage/ResourceLoadStatisticsStore.cpp
r219220 r219231 40 40 using namespace WebCore; 41 41 42 static const auto statisticsModelVersion = 4;42 static const auto statisticsModelVersion = 5; 43 43 static Seconds timeToLiveUserInteraction { 24_h * 30. }; 44 44 static Seconds timeToLiveCookiePartitionFree { 24_h }; … … 103 103 return; 104 104 105 unsigned version ;106 if (!decoder.decodeUInt32("version", version ))107 version = 1;108 109 static const auto minimumVersionWithGrandfathering = 3;110 if (version > minimumVersionWithGrandfathering) {111 double endOfGrandfatheringTimestamp; 112 if (decoder.decodeDouble("endOfGrandfatheringTimestamp", endOfGrandfatheringTimestamp))113 m_endOfGrandfatheringTimestamp = WallTime::fromRawSeconds(endOfGrandfatheringTimestamp);114 else115 m_endOfGrandfatheringTimestamp = { };116 }105 unsigned versionOnDisk; 106 if (!decoder.decodeUInt32("version", versionOnDisk)) 107 return; 108 109 if (versionOnDisk != statisticsModelVersion) 110 return; 111 112 double endOfGrandfatheringTimestamp; 113 if (decoder.decodeDouble("endOfGrandfatheringTimestamp", endOfGrandfatheringTimestamp)) 114 m_endOfGrandfatheringTimestamp = WallTime::fromRawSeconds(endOfGrandfatheringTimestamp); 115 else 116 m_endOfGrandfatheringTimestamp = { }; 117 117 118 118 Vector<ResourceLoadStatistics> loadedStatistics; 119 bool succeeded = decoder.decodeObjects("browsingStatistics", loadedStatistics, [ version](KeyedDecoder& decoderInner, ResourceLoadStatistics& statistics) {120 return statistics.decode(decoderInner , version);119 bool succeeded = decoder.decodeObjects("browsingStatistics", loadedStatistics, [](KeyedDecoder& decoderInner, ResourceLoadStatistics& statistics) { 120 return statistics.decode(decoderInner); 121 121 }); 122 122
Note: See TracChangeset
for help on using the changeset viewer.