Commit 0a8820a7 authored by Alexander Timin's avatar Alexander Timin Committed by Commit Bot

[bfcache] Track the presence of network requests for metrics

R=kinuko@chromium.org,haraken@chromium.org
BUG=933147

Change-Id: Ie6590bebb11e70e024f829045e1f8717d83e9af1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1572128
Commit-Queue: Alexander Timin <altimin@chromium.org>
Auto-Submit: Alexander Timin <altimin@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652510}
parent 46a6f872
......@@ -30,6 +30,15 @@ ukm::SourceId ToSourceId(int64_t navigation_id) {
ukm::SourceIdType::NAVIGATION_ID);
}
// Some features are present in almost all page loads (especially the ones
// which are related to the document finishing loading).
// We ignore them to make tests easier to read and write.
constexpr uint64_t kFeaturesToIgnoreMask =
1 << static_cast<size_t>(
blink::scheduler::WebSchedulerTrackedFeature::kDocumentLoaded) |
1 << static_cast<size_t>(blink::scheduler::WebSchedulerTrackedFeature::
kOutstandingNetworkRequest);
using UkmMetrics = std::map<std::string, int64_t>;
using UkmEntry = std::pair<ukm::SourceId, UkmMetrics>;
......@@ -294,12 +303,6 @@ std::ostream& operator<<(std::ostream& os, const FeatureUsage& usage) {
std::vector<FeatureUsage> GetFeatureUsageMetrics(
ukm::TestAutoSetUkmRecorder* recorder) {
// Some features are present in almost all page loads (especially the ones
// which are related to the document finishing loading).
// We ignore them to make tests easier to read and write.
constexpr uint64_t features_to_ignore_mask =
~(1 << static_cast<size_t>(
blink::scheduler::WebSchedulerTrackedFeature::kDocumentLoaded));
std::vector<FeatureUsage> result;
for (const auto& entry :
......@@ -309,13 +312,12 @@ std::vector<FeatureUsage> GetFeatureUsageMetrics(
FeatureUsage feature_usage;
feature_usage.source_id = entry.first;
feature_usage.main_frame_features =
entry.second.at("MainFrameFeatures") & features_to_ignore_mask;
entry.second.at("MainFrameFeatures") & ~kFeaturesToIgnoreMask;
feature_usage.same_origin_subframes_features =
entry.second.at("SameOriginSubframesFeatures") &
features_to_ignore_mask;
entry.second.at("SameOriginSubframesFeatures") & ~kFeaturesToIgnoreMask;
feature_usage.cross_origin_subframes_features =
entry.second.at("CrossOriginSubframesFeatures") &
features_to_ignore_mask;
~kFeaturesToIgnoreMask;
result.push_back(feature_usage);
}
return result;
......@@ -473,8 +475,9 @@ IN_PROC_BROWSER_TEST_F(BackForwardCacheMetricsBrowserTest, DedicatedWorker) {
EXPECT_EQ(
static_cast<WebContentsImpl*>(shell()->web_contents())
->GetMainFrame()
->scheduler_tracked_features(),
->GetMainFrame()
->scheduler_tracked_features() &
~kFeaturesToIgnoreMask,
1ull << static_cast<size_t>(blink::scheduler::WebSchedulerTrackedFeature::
kDedicatedWorkerOrWorklet));
}
......
......@@ -30,8 +30,9 @@ enum class WebSchedulerTrackedFeature {
kContainsPlugins = 12,
kDocumentLoaded = 13,
kDedicatedWorkerOrWorklet = 14,
kOutstandingNetworkRequest = 15,
kCount = 15
kCount = 16
};
} // namespace scheduler
......
......@@ -37,6 +37,8 @@ class SchedulingAffectingFeaturesTest : public SimTest {
->GetActiveFeaturesTrackedForBackForwardCacheMetrics()) {
if (feature == SchedulingPolicy::Feature::kDocumentLoaded)
continue;
if (feature == SchedulingPolicy::Feature::kOutstandingNetworkRequest)
continue;
result.push_back(feature);
}
return result;
......
......@@ -356,6 +356,12 @@ ResourceLoader::ResourceLoader(ResourceFetcher* fetcher,
DCHECK(resource_);
DCHECK(fetcher_);
if (FrameScheduler* frame_scheduler = fetcher->GetFrameScheduler()) {
feature_handle_for_scheduler_ = frame_scheduler->RegisterFeature(
SchedulingPolicy::Feature::kOutstandingNetworkRequest,
{SchedulingPolicy::RecordMetricsForBackForwardCache()});
}
resource_->SetLoader(this);
}
......@@ -547,6 +553,7 @@ void ResourceLoader::Release(
bool released = scheduler_->Release(scheduler_client_id_, option, hints);
DCHECK(released);
scheduler_client_id_ = ResourceLoadScheduler::kInvalidClientId;
feature_handle_for_scheduler_.reset();
}
void ResourceLoader::Restart(const ResourceRequest& request) {
......
......@@ -46,6 +46,7 @@
#include "third_party/blink/renderer/platform/loader/fetch/resource_request.h"
#include "third_party/blink/renderer/platform/loader/fetch/response_body_loader_client.h"
#include "third_party/blink/renderer/platform/platform_export.h"
#include "third_party/blink/renderer/platform/scheduler/public/frame_or_worker_scheduler.h"
#include "third_party/blink/renderer/platform/wtf/forward.h"
namespace blink {
......@@ -253,6 +254,9 @@ class PLATFORM_EXPORT ResourceLoader final
bool defers_handling_data_url_ = false;
TaskRunnerTimer<ResourceLoader> cancel_timer_;
FrameScheduler::SchedulingAffectingFeatureHandle
feature_handle_for_scheduler_;
};
} // namespace blink
......
......@@ -13,6 +13,7 @@ bool SchedulingPolicy::IsFeatureSticky(SchedulingPolicy::Feature feature) {
case Feature::kWebSocket:
case Feature::kWebRTC:
case Feature::kDedicatedWorkerOrWorklet:
case Feature::kOutstandingNetworkRequest:
return false;
case Feature::kMainResourceHasCacheControlNoStore:
case Feature::kMainResourceHasCacheControlNoCache:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment