зеркало из https://github.com/mozilla/gecko-dev.git
140 строки
4.2 KiB
C++
140 строки
4.2 KiB
C++
/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
#ifndef GFX_ENV_H
|
|
#define GFX_ENV_H
|
|
|
|
#include "mozilla/Attributes.h"
|
|
#include "nsDebug.h"
|
|
#include "prenv.h"
|
|
|
|
#include <sstream>
|
|
#include <string_view>
|
|
|
|
// To register the check for an environment variable existence (and not empty),
|
|
// add a line in this file using the DECL_GFX_ENV macro.
|
|
//
|
|
// For example this line in the .h:
|
|
// DECL_GFX_ENV(MOZ_GL_SPEW);
|
|
|
|
// means that you can call e.g.
|
|
// if (gfxEnv::MOZ_GL_SPEW()) { ... }
|
|
// if (gfxEnv::MOZ_GL_SPEW().as_str == "2") { ... }
|
|
// and that the value will be checked only once, first time we call it, then
|
|
// cached.
|
|
|
|
struct EnvVal {
|
|
std::string_view as_str;
|
|
|
|
static auto From(const char* const raw) {
|
|
auto ret = EnvVal{};
|
|
|
|
ret.as_str = std::string_view{};
|
|
// Empty string counts as missing.
|
|
if (raw) {
|
|
ret.as_str = raw;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
MOZ_IMPLICIT operator bool() const {
|
|
return !as_str.empty(); // Warning, this means ENV=0" -> true!
|
|
}
|
|
};
|
|
|
|
class gfxEnv final {
|
|
public:
|
|
gfxEnv() = delete;
|
|
|
|
static EnvVal Uncached(const char* name) {
|
|
const auto raw = PR_GetEnv(name);
|
|
const auto ret = EnvVal::From(raw);
|
|
if (ret && ret.as_str == "0") {
|
|
auto msg = std::stringstream{};
|
|
msg << name << "=" << ret.as_str << " -> true!";
|
|
NS_WARNING(msg.str().c_str());
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
#define DECL_GFX_ENV(Name) \
|
|
static const EnvVal& Name() { \
|
|
static const auto cached = Uncached(#Name); \
|
|
return cached; \
|
|
}
|
|
|
|
// This is where DECL_GFX_ENV for each of the environment variables should go.
|
|
// We will keep these in an alphabetical order by the environment variable,
|
|
// to make it easier to see if a method accessing an entry already exists.
|
|
// Just insert yours in the list.
|
|
|
|
// OpenGL shader debugging in OGLShaderProgram, in DEBUG only
|
|
DECL_GFX_ENV(MOZ_DEBUG_SHADERS)
|
|
|
|
// Disabling the crash guard in DriverCrashGuard
|
|
DECL_GFX_ENV(MOZ_DISABLE_CRASH_GUARD)
|
|
DECL_GFX_ENV(MOZ_FORCE_CRASH_GUARD_NIGHTLY)
|
|
|
|
// We force present to work around some Windows bugs - disable that if this
|
|
// environment variable is set.
|
|
DECL_GFX_ENV(MOZ_DISABLE_FORCE_PRESENT)
|
|
|
|
// Together with paint dumping, only when MOZ_DUMP_PAINTING is defined.
|
|
// Dumping compositor textures is broken pretty badly. For example,
|
|
// on Linux it crashes TextureHost::GetAsSurface() returns null.
|
|
// Expect to have to fix things like this if you turn it on.
|
|
// Meanwhile, content-side texture dumping
|
|
// (conditioned on DebugDumpPainting()) is a good replacement.
|
|
DECL_GFX_ENV(MOZ_DUMP_COMPOSITOR_TEXTURES)
|
|
|
|
// Dump GLBlitHelper shader source text.
|
|
DECL_GFX_ENV(MOZ_DUMP_GLBLITHELPER)
|
|
|
|
// Paint dumping, only when MOZ_DUMP_PAINTING is defined.
|
|
DECL_GFX_ENV(MOZ_DUMP_PAINT)
|
|
DECL_GFX_ENV(MOZ_DUMP_PAINT_ITEMS)
|
|
DECL_GFX_ENV(MOZ_DUMP_PAINT_TO_FILE)
|
|
|
|
// Force gfxDevCrash to use MOZ_CRASH in Beta and Release
|
|
DECL_GFX_ENV(MOZ_GFX_CRASH_MOZ_CRASH)
|
|
// Force gfxDevCrash to use telemetry in Nightly and Aurora
|
|
DECL_GFX_ENV(MOZ_GFX_CRASH_TELEMETRY)
|
|
|
|
// Debugging in GLContext
|
|
DECL_GFX_ENV(MOZ_GL_DEBUG)
|
|
DECL_GFX_ENV(MOZ_GL_DEBUG_VERBOSE)
|
|
DECL_GFX_ENV(MOZ_GL_DEBUG_ABORT_ON_ERROR)
|
|
DECL_GFX_ENV(MOZ_GL_RELEASE_ASSERT_CONTEXT_OWNERSHIP)
|
|
DECL_GFX_ENV(MOZ_EGL_RELEASE_ASSERT_CONTEXT_OWNERSHIP)
|
|
|
|
// Count GL extensions
|
|
DECL_GFX_ENV(MOZ_GL_DUMP_EXTS)
|
|
|
|
// Very noisy GLContext and GLContextProviderEGL
|
|
DECL_GFX_ENV(MOZ_GL_SPEW)
|
|
|
|
// Do extra work before and after each GLX call in GLContextProviderGLX
|
|
DECL_GFX_ENV(MOZ_GLX_DEBUG)
|
|
|
|
// GL compositing on Windows
|
|
DECL_GFX_ENV(MOZ_LAYERS_PREFER_EGL)
|
|
|
|
// Offscreen GL context for main layer manager
|
|
DECL_GFX_ENV(MOZ_LAYERS_PREFER_OFFSCREEN)
|
|
|
|
// WebGL workarounds
|
|
DECL_GFX_ENV(MOZ_WEBGL_WORKAROUND_FIRST_AFFECTS_INSTANCE_ID)
|
|
|
|
// WARNING:
|
|
// For readability reasons, please make sure that you've added your new envvar
|
|
// to the list above in alphabetical order.
|
|
// Please do not just append it to the end of the list!
|
|
|
|
#undef DECL_GFX_ENV
|
|
};
|
|
|
|
#endif /* GFX_ENV_H */
|