blob: 6c11f50d0048e23739ed41d8c0f0a823dc3b3b7f [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/viz/common/features.h"
#include "base/command_line.h"
#include "build/chromecast_buildflags.h"
#include "components/viz/common/switches.h"
#include "components/viz/common/viz_utils.h"
#include "gpu/config/gpu_finch_features.h"
#if defined(OS_ANDROID)
#include "base/android/build_info.h"
#endif
namespace features {
const base::Feature kForcePreferredIntervalForVideo{
"ForcePreferredIntervalForVideo", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kUseSkiaForGLReadback{"UseSkiaForGLReadback",
base::FEATURE_ENABLED_BY_DEFAULT};
// Use the SkiaRenderer.
#if defined(OS_LINUX) && !(defined(OS_CHROMEOS) || BUILDFLAG(IS_CHROMECAST))
const base::Feature kUseSkiaRenderer{"UseSkiaRenderer",
base::FEATURE_ENABLED_BY_DEFAULT};
#else
const base::Feature kUseSkiaRenderer{"UseSkiaRenderer",
base::FEATURE_DISABLED_BY_DEFAULT};
#endif
// Use the SkiaRenderer to record SkPicture.
const base::Feature kRecordSkPicture{"RecordSkPicture",
base::FEATURE_DISABLED_BY_DEFAULT};
// Kill-switch to disable de-jelly, even if flags/properties indicate it should
// be enabled.
const base::Feature kDisableDeJelly{"DisableDeJelly",
base::FEATURE_DISABLED_BY_DEFAULT};
#if defined(OS_ANDROID)
// When wide color gamut content from the web is encountered, promote our
// display to wide color gamut if supported.
const base::Feature kDynamicColorGamut{"DynamicColorGamut",
base::FEATURE_DISABLED_BY_DEFAULT};
#endif
// Viz for WebView architecture.
const base::Feature kVizForWebView{"VizForWebView",
base::FEATURE_DISABLED_BY_DEFAULT};
// Submit CompositorFrame from SynchronousLayerTreeFrameSink directly to viz in
// WebView.
const base::Feature kVizFrameSubmissionForWebView{
"VizFrameSubmissionForWebView", base::FEATURE_DISABLED_BY_DEFAULT};
const base::Feature kUsePreferredIntervalForVideo{
"UsePreferredIntervalForVideo", base::FEATURE_DISABLED_BY_DEFAULT};
// Whether we should use the real buffers corresponding to overlay candidates in
// order to do a pageflip test rather than allocating test buffers.
const base::Feature kUseRealBuffersForPageFlipTest{
"UseRealBuffersForPageFlipTest", base::FEATURE_DISABLED_BY_DEFAULT};
#if defined(OS_FUCHSIA)
// Enables SkiaOutputDeviceBufferQueue instead of Vulkan swapchain on Fuchsia.
const base::Feature kUseSkiaOutputDeviceBufferQueue{
"UseSkiaOutputDeviceBufferQueue", base::FEATURE_DISABLED_BY_DEFAULT};
#endif
// Whether we should split partially occluded quads to reduce overdraw.
const base::Feature kSplitPartiallyOccludedQuads{
"SplitPartiallyOccludedQuads", base::FEATURE_ENABLED_BY_DEFAULT};
// Whether we should log extra debug information to webrtc native log.
const base::Feature kWebRtcLogCapturePipeline{
"WebRtcLogCapturePipeline", base::FEATURE_DISABLED_BY_DEFAULT};
// The number of frames to wait before toggling to a lower frame rate.
const base::FeatureParam<int> kNumOfFramesToToggleInterval{
&kUsePreferredIntervalForVideo, "NumOfFramesToToggleInterval", 60};
bool IsForcePreferredIntervalForVideoEnabled() {
return base::FeatureList::IsEnabled(kForcePreferredIntervalForVideo);
}
bool IsVizHitTestingDebugEnabled() {
return base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableVizHitTestDebug);
}
bool IsUsingSkiaForGLReadback() {
// Viz for webview requires Skia Readback.
if (IsUsingVizForWebView())
return true;
return base::FeatureList::IsEnabled(kUseSkiaForGLReadback);
}
bool IsUsingSkiaRenderer() {
#if defined(OS_ANDROID)
// We don't support KitKat. Check for it before looking at the feature flag
// so that KitKat doesn't show up in Control or Enabled experiment group.
if (base::android::BuildInfo::GetInstance()->sdk_int() <=
base::android::SDK_VERSION_KITKAT)
return false;
#endif
// Viz for webview requires SkiaRenderer.
if (IsUsingVizForWebView())
return true;
return base::FeatureList::IsEnabled(kUseSkiaRenderer) ||
base::FeatureList::IsEnabled(kVulkan);
}
bool IsRecordingSkPicture() {
return IsUsingSkiaRenderer() &&
base::FeatureList::IsEnabled(kRecordSkPicture);
}
#if defined(OS_ANDROID)
bool IsDynamicColorGamutEnabled() {
if (viz::AlwaysUseWideColorGamut())
return false;
return base::FeatureList::IsEnabled(kDynamicColorGamut);
}
#endif
bool IsUsingVizForWebView() {
// Viz for WebView requires shared images to be enabled.
if (!base::FeatureList::IsEnabled(kEnableSharedImageForWebview))
return false;
return base::FeatureList::IsEnabled(kVizForWebView);
}
bool IsUsingVizFrameSubmissionForWebView() {
if (base::FeatureList::IsEnabled(kVizFrameSubmissionForWebView)) {
DCHECK(IsUsingVizForWebView())
<< "kVizFrameSubmissionForWebView requires kVizForWebView";
return true;
}
return false;
}
bool IsUsingPreferredIntervalForVideo() {
return IsForcePreferredIntervalForVideoEnabled() ||
base::FeatureList::IsEnabled(kUsePreferredIntervalForVideo);
}
int NumOfFramesToToggleInterval() {
return kNumOfFramesToToggleInterval.Get();
}
bool ShouldUseRealBuffersForPageFlipTest() {
return base::FeatureList::IsEnabled(kUseRealBuffersForPageFlipTest);
}
bool ShouldSplitPartiallyOccludedQuads() {
return base::FeatureList::IsEnabled(kSplitPartiallyOccludedQuads);
}
bool ShouldWebRtcLogCapturePipeline() {
return base::FeatureList::IsEnabled(kWebRtcLogCapturePipeline);
}
} // namespace features