blob: ce19c77c24971d0d35dd5a2e7e6770dcb706621f [file] [log] [blame]
// Copyright 2020 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "cobalt/configuration/configuration.h"
#include "base/logging.h"
#include "base/memory/singleton.h"
#include "starboard/string.h"
#include "starboard/system.h"
namespace cobalt {
namespace configuration {
Configuration* Configuration::configuration_ = nullptr;
Configuration* Configuration::GetInstance() {
return base::Singleton<Configuration>::get();
}
Configuration::Configuration() {
#if SB_API_VERSION < 11
configuration_api_ = nullptr;
#else
configuration_api_ = static_cast<const CobaltExtensionConfigurationApi*>(
SbSystemGetExtension(kCobaltExtensionConfigurationName));
if (configuration_api_) {
// Verify it's the extension needed.
if (SbStringCompareAll(configuration_api_->name,
kCobaltExtensionConfigurationName) != 0 ||
configuration_api_->version < 1) {
LOG(WARNING) << "Not using supplied cobalt configuration extension: "
<< "'" << configuration_api_->name << "' ("
<< configuration_api_->version << ")";
configuration_api_ = nullptr;
}
}
#endif
}
const char* Configuration::CobaltUserOnExitStrategy() {
if (configuration_api_) {
return configuration_api_->CobaltUserOnExitStrategy();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return "stop";
#elif defined(COBALT_USER_ON_EXIT_STRATEGY)
return COBALT_USER_ON_EXIT_STRATEGY;
#else
return "stop";
#endif
}
bool Configuration::CobaltRenderDirtyRegionOnly() {
if (configuration_api_) {
return configuration_api_->CobaltRenderDirtyRegionOnly();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return false;
#elif defined(COBALT_RENDER_DIRTY_REGION_ONLY)
return true;
#else
return false;
#endif
}
int Configuration::CobaltEglSwapInterval() {
if (configuration_api_) {
return configuration_api_->CobaltEglSwapInterval();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 1;
#elif defined(COBALT_EGL_SWAP_INTERVAL)
return COBALT_EGL_SWAP_INTERVAL;
#else
return 1;
#endif
}
const char* Configuration::CobaltFallbackSplashScreenUrl() {
if (configuration_api_) {
return configuration_api_->CobaltFallbackSplashScreenUrl();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return "none";
#elif defined(COBALT_FALLBACK_SPLASH_SCREEN_URL)
return COBALT_FALLBACK_SPLASH_SCREEN_URL;
#else
return "none";
#endif
}
bool Configuration::CobaltEnableQuic() {
if (configuration_api_) {
return configuration_api_->CobaltEnableQuic();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return true;
#elif defined(COBALT_ENABLE_QUIC)
return true;
#else
return false;
#endif
}
int Configuration::CobaltSkiaCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltSkiaCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 4 * 1024 * 1024;
#elif defined(COBALT_SKIA_CACHE_SIZE_IN_BYTES)
return COBALT_SKIA_CACHE_SIZE_IN_BYTES;
#else
return 4 * 1024 * 1024;
#endif
}
int Configuration::CobaltOffscreenTargetCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltOffscreenTargetCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return -1;
#elif defined(COBALT_OFFSCREEN_TARGET_CACHE_SIZE_IN_BYTES)
return COBALT_OFFSCREEN_TARGET_CACHE_SIZE_IN_BYTES;
#else
return -1;
#endif
}
int Configuration::CobaltEncodedImageCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltEncodedImageCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 1024 * 1024;
#elif defined(COBALT_ENCODED_IMAGE_CACHE_SIZE_IN_BYTES)
return COBALT_ENCODED_IMAGE_CACHE_SIZE_IN_BYTES;
#else
return 1024 * 1024;
#endif
}
int Configuration::CobaltImageCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltImageCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return -1;
#elif defined(COBALT_IMAGE_CACHE_SIZE_IN_BYTES)
return COBALT_IMAGE_CACHE_SIZE_IN_BYTES;
#else
return -1;
#endif
}
int Configuration::CobaltLocalTypefaceCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltLocalTypefaceCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 16 * 1024 * 1024;
#elif defined(COBALT_LOCAL_TYPEFACE_CACHE_SIZE_IN_BYTES)
return COBALT_LOCAL_TYPEFACE_CACHE_SIZE_IN_BYTES;
#else
return 16 * 1024 * 1024;
#endif
}
int Configuration::CobaltRemoteTypefaceCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltRemoteTypefaceCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 4 * 1024 * 1024;
#elif defined(COBALT_REMOTE_TYPEFACE_CACHE_SIZE_IN_BYTES)
return COBALT_REMOTE_TYPEFACE_CACHE_SIZE_IN_BYTES;
#else
return 4 * 1024 * 1024;
#endif
}
int Configuration::CobaltMeshCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltMeshCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 1024 * 1024;
#elif defined(COBALT_MESH_CACHE_SIZE_IN_BYTES)
return COBALT_MESH_CACHE_SIZE_IN_BYTES;
#else
return 1024 * 1024;
#endif
}
int Configuration::CobaltSoftwareSurfaceCacheSizeInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltSoftwareSurfaceCacheSizeInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 8 * 1024 * 1024;
#elif defined(COBALT_SOFTWARE_SURFACE_CACHE_SIZE_IN_BYTES)
return COBALT_SOFTWARE_SURFACE_CACHE_SIZE_IN_BYTES;
#else
return 8 * 1024 * 1024;
#endif
}
float Configuration::CobaltImageCacheCapacityMultiplierWhenPlayingVideo() {
if (configuration_api_) {
return configuration_api_
->CobaltImageCacheCapacityMultiplierWhenPlayingVideo();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 1.0f;
#elif defined(COBALT_IMAGE_CACHE_CAPACITY_MULTIPLIER_WHEN_PLAYING_VIDEO)
return COBALT_IMAGE_CACHE_CAPACITY_MULTIPLIER_WHEN_PLAYING_VIDEO;
#else
return 1.0f;
#endif
}
int Configuration::CobaltJsGarbageCollectionThresholdInBytes() {
if (configuration_api_) {
return configuration_api_->CobaltJsGarbageCollectionThresholdInBytes();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 8 * 1024 * 1024;
#elif defined(COBALT_JS_GARBAGE_COLLECTION_THRESHOLD_IN_BYTES)
return COBALT_JS_GARBAGE_COLLECTION_THRESHOLD_IN_BYTES;
#else
return 8 * 1024 * 1024;
#endif
}
int Configuration::CobaltSkiaGlyphAtlasWidth() {
if (configuration_api_) {
return configuration_api_->CobaltSkiaGlyphAtlasWidth();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 2048;
#elif defined(COBALT_SKIA_GLYPH_ATLAS_WIDTH)
return COBALT_SKIA_GLYPH_ATLAS_WIDTH;
#else
return 2048;
#endif
}
int Configuration::CobaltSkiaGlyphAtlasHeight() {
if (configuration_api_) {
return configuration_api_->CobaltSkiaGlyphAtlasHeight();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return 2048;
#elif defined(COBALT_SKIA_GLYPH_ATLAS_HEIGHT)
return COBALT_SKIA_GLYPH_ATLAS_HEIGHT;
#else
return 2048;
#endif
}
int Configuration::CobaltReduceCpuMemoryBy() {
if (configuration_api_) {
return configuration_api_->CobaltReduceCpuMemoryBy();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return -1;
#elif defined(COBALT_REDUCE_CPU_MEMORY_BY)
return COBALT_REDUCE_CPU_MEMORY_BY;
#else
return -1;
#endif
}
int Configuration::CobaltReduceGpuMemoryBy() {
if (configuration_api_) {
return configuration_api_->CobaltReduceGpuMemoryBy();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return -1;
#elif defined(COBALT_REDUCE_GPU_MEMORY_BY)
return COBALT_REDUCE_GPU_MEMORY_BY;
#else
return -1;
#endif
}
bool Configuration::CobaltGcZeal() {
if (configuration_api_) {
return configuration_api_->CobaltGcZeal();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return false;
#elif defined(COBALT_GC_ZEAL)
return true;
#else
return false;
#endif
}
const char* Configuration::CobaltRasterizerType() {
if (configuration_api_) {
return configuration_api_->CobaltRasterizerType();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return "direct-gles";
#elif defined(COBALT_FORCE_STUB_RASTERIZER)
return "stub";
#elif defined(COBALT_FORCE_DIRECT_GLES_RASTERIZER)
return "direct-gles";
#else
return "hardware";
#endif
}
bool Configuration::CobaltEnableJit() {
if (configuration_api_) {
return configuration_api_->CobaltEnableJit();
}
#if SB_API_VERSION >= SB_FEATURE_GYP_CONFIGURATION_VERSION
return false;
#elif defined(ENGINE_SUPPORTS_JIT)
return true;
#elif defined(COBALT_DISABLE_JIT)
return false;
#else
return false;
#endif
}
} // namespace configuration
} // namespace cobalt