Commit 3980b1f8 by Ian Elliott Committed by Commit Bot

Refactor FrameCapture.cpp to use common utility

The frame-capture-specific AndroidGetEnvFromProp() function has been ported to the general utility, GetEnvironmentVarFromAndroidProperty(). Bug: b/170249632 Change-Id: I97de8205ceef140dfd8fab8e6f2d52b90cd996cf Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2502772Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Commit-Queue: Ian Elliott <ianelliott@google.com>
parent 8afe3f17
...@@ -28,7 +28,7 @@ std::string GetExecutableName() ...@@ -28,7 +28,7 @@ std::string GetExecutableName()
// Call out to 'getprop' on a shell to get an Android property. If the value was set, set an // Call out to 'getprop' on a shell to get an Android property. If the value was set, set an
// environment variable with that value. Return the value of the environment variable. // environment variable with that value. Return the value of the environment variable.
std::string GetEnvironmentVarFromAndroidProperty(const char *variableName, const char *propertyName) std::string GetEnvironmentVarOrAndroidProperty(const char *variableName, const char *propertyName)
{ {
#if defined(ANGLE_PLATFORM_ANDROID) && __ANDROID_API__ >= 21 #if defined(ANGLE_PLATFORM_ANDROID) && __ANDROID_API__ >= 21
std::string sanitizedPropertyName = propertyName; std::string sanitizedPropertyName = propertyName;
......
...@@ -28,8 +28,7 @@ bool SetCWD(const char *dirName); ...@@ -28,8 +28,7 @@ bool SetCWD(const char *dirName);
bool SetEnvironmentVar(const char *variableName, const char *value); bool SetEnvironmentVar(const char *variableName, const char *value);
bool UnsetEnvironmentVar(const char *variableName); bool UnsetEnvironmentVar(const char *variableName);
std::string GetEnvironmentVar(const char *variableName); std::string GetEnvironmentVar(const char *variableName);
std::string GetEnvironmentVarFromAndroidProperty(const char *variableName, std::string GetEnvironmentVarOrAndroidProperty(const char *variableName, const char *propertyName);
const char *propertyName);
const char *GetPathSeparatorForEnvironmentVar(); const char *GetPathSeparatorForEnvironmentVar();
bool PrependPathToEnvironmentVar(const char *variableName, const char *path); bool PrependPathToEnvironmentVar(const char *variableName, const char *path);
bool IsDirectory(const char *filename); bool IsDirectory(const char *filename);
......
...@@ -65,8 +65,7 @@ constexpr size_t kFunctionSizeLimit = 5000; ...@@ -65,8 +65,7 @@ constexpr size_t kFunctionSizeLimit = 5000;
// Limit based on MSVC Compiler Error C2026 // Limit based on MSVC Compiler Error C2026
constexpr size_t kStringLengthLimit = 16380; constexpr size_t kStringLengthLimit = 16380;
#if defined(ANGLE_PLATFORM_ANDROID) // Android debug properties that correspond to the above environment variables
constexpr char kAndroidCaptureEnabled[] = "debug.angle.capture.enabled"; constexpr char kAndroidCaptureEnabled[] = "debug.angle.capture.enabled";
constexpr char kAndroidOutDir[] = "debug.angle.capture.out_dir"; constexpr char kAndroidOutDir[] = "debug.angle.capture.out_dir";
constexpr char kAndroidFrameStart[] = "debug.angle.capture.frame_start"; constexpr char kAndroidFrameStart[] = "debug.angle.capture.frame_start";
...@@ -75,84 +74,6 @@ constexpr char kAndroidCaptureTrigger[] = "debug.angle.capture.trigger"; ...@@ -75,84 +74,6 @@ constexpr char kAndroidCaptureTrigger[] = "debug.angle.capture.trigger";
constexpr char kAndroidCaptureLabel[] = "debug.angle.capture.label"; constexpr char kAndroidCaptureLabel[] = "debug.angle.capture.label";
constexpr char kAndroidCompression[] = "debug.angle.capture.compression"; constexpr char kAndroidCompression[] = "debug.angle.capture.compression";
constexpr int kStreamSize = 64;
constexpr char kAndroidOutputSubdir[] = "/angle_capture/";
// Call out to 'getprop' on a shell and return a string if the value was set
std::string AndroidGetEnvFromProp(const char *key)
{
std::string command("getprop ");
command += key;
// Run the command and open a I/O stream to read results
char stream[kStreamSize] = {};
FILE *pipe = popen(command.c_str(), "r");
if (pipe != nullptr)
{
fgets(stream, kStreamSize, pipe);
pclose(pipe);
}
// Right strip white space
std::string result(stream);
result.erase(result.find_last_not_of(" \n\r\t") + 1);
return result;
}
void PrimeAndroidEnvironmentVariables()
{
std::string enabled = AndroidGetEnvFromProp(kAndroidCaptureEnabled);
if (!enabled.empty())
{
INFO() << "Frame capture read " << enabled << " from " << kAndroidCaptureEnabled;
setenv(kEnabledVarName, enabled.c_str(), 1);
}
std::string outDir = AndroidGetEnvFromProp(kAndroidOutDir);
if (!outDir.empty())
{
INFO() << "Frame capture read " << outDir << " from " << kAndroidOutDir;
setenv(kOutDirectoryVarName, outDir.c_str(), 1);
}
std::string frameStart = AndroidGetEnvFromProp(kAndroidFrameStart);
if (!frameStart.empty())
{
INFO() << "Frame capture read " << frameStart << " from " << kAndroidFrameStart;
setenv(kFrameStartVarName, frameStart.c_str(), 1);
}
std::string frameEnd = AndroidGetEnvFromProp(kAndroidFrameEnd);
if (!frameEnd.empty())
{
INFO() << "Frame capture read " << frameEnd << " from " << kAndroidFrameEnd;
setenv(kFrameEndVarName, frameEnd.c_str(), 1);
}
std::string captureTrigger = AndroidGetEnvFromProp(kAndroidCaptureTrigger);
if (!captureTrigger.empty())
{
INFO() << "Capture trigger read " << captureTrigger << " from " << kAndroidCaptureTrigger;
setenv(kCaptureTriggerVarName, captureTrigger.c_str(), 1);
}
std::string captureLabel = AndroidGetEnvFromProp(kAndroidCaptureLabel);
if (!captureLabel.empty())
{
INFO() << "Frame capture read " << captureLabel << " from " << kAndroidCaptureLabel;
setenv(kCaptureLabel, captureLabel.c_str(), 1);
}
std::string compression = AndroidGetEnvFromProp(kAndroidCompression);
if (!compression.empty())
{
INFO() << "Frame capture read " << compression << " from " << kAndroidCompression;
setenv(kCompression, compression.c_str(), 1);
}
}
#endif
std::string GetDefaultOutDirectory() std::string GetDefaultOutDirectory()
{ {
#if defined(ANGLE_PLATFORM_ANDROID) #if defined(ANGLE_PLATFORM_ANDROID)
...@@ -178,6 +99,7 @@ std::string GetDefaultOutDirectory() ...@@ -178,6 +99,7 @@ std::string GetDefaultOutDirectory()
ERR() << "not able to lookup application id"; ERR() << "not able to lookup application id";
} }
constexpr char kAndroidOutputSubdir[] = "/angle_capture/";
path += std::string(applicationId) + kAndroidOutputSubdir; path += std::string(applicationId) + kAndroidOutputSubdir;
// Check for existance of output path // Check for existance of output path
...@@ -196,11 +118,7 @@ std::string GetDefaultOutDirectory() ...@@ -196,11 +118,7 @@ std::string GetDefaultOutDirectory()
std::string GetCaptureTrigger() std::string GetCaptureTrigger()
{ {
#if defined(ANGLE_PLATFORM_ANDROID) return GetEnvironmentVarOrAndroidProperty(kCaptureTriggerVarName, kAndroidCaptureTrigger);
return AndroidGetEnvFromProp(kAndroidCaptureTrigger);
#else
return GetEnvironmentVar(kCaptureTriggerVarName);
#endif // defined(ANGLE_PLATFORM_ANDROID)
} }
std::ostream &operator<<(std::ostream &os, gl::ContextID contextId) std::ostream &operator<<(std::ostream &os, gl::ContextID contextId)
...@@ -3622,17 +3540,15 @@ FrameCapture::FrameCapture() ...@@ -3622,17 +3540,15 @@ FrameCapture::FrameCapture()
{ {
reset(); reset();
#if defined(ANGLE_PLATFORM_ANDROID) std::string enabledFromEnv =
PrimeAndroidEnvironmentVariables(); GetEnvironmentVarOrAndroidProperty(kEnabledVarName, kAndroidCaptureEnabled);
#endif
std::string enabledFromEnv = angle::GetEnvironmentVar(kEnabledVarName);
if (enabledFromEnv == "0") if (enabledFromEnv == "0")
{ {
mEnabled = false; mEnabled = false;
} }
std::string pathFromEnv = angle::GetEnvironmentVar(kOutDirectoryVarName); std::string pathFromEnv =
GetEnvironmentVarOrAndroidProperty(kOutDirectoryVarName, kAndroidOutDir);
if (pathFromEnv.empty()) if (pathFromEnv.empty())
{ {
mOutDirectory = GetDefaultOutDirectory(); mOutDirectory = GetDefaultOutDirectory();
...@@ -3648,19 +3564,21 @@ FrameCapture::FrameCapture() ...@@ -3648,19 +3564,21 @@ FrameCapture::FrameCapture()
mOutDirectory += '/'; mOutDirectory += '/';
} }
std::string startFromEnv = angle::GetEnvironmentVar(kFrameStartVarName); std::string startFromEnv =
GetEnvironmentVarOrAndroidProperty(kFrameStartVarName, kAndroidFrameStart);
if (!startFromEnv.empty()) if (!startFromEnv.empty())
{ {
mCaptureStartFrame = atoi(startFromEnv.c_str()); mCaptureStartFrame = atoi(startFromEnv.c_str());
} }
std::string endFromEnv = angle::GetEnvironmentVar(kFrameEndVarName); std::string endFromEnv = GetEnvironmentVarOrAndroidProperty(kFrameEndVarName, kAndroidFrameEnd);
if (!endFromEnv.empty()) if (!endFromEnv.empty())
{ {
mCaptureEndFrame = atoi(endFromEnv.c_str()); mCaptureEndFrame = atoi(endFromEnv.c_str());
} }
std::string captureTriggerFromEnv = angle::GetEnvironmentVar(kCaptureTriggerVarName); std::string captureTriggerFromEnv =
GetEnvironmentVarOrAndroidProperty(kCaptureTriggerVarName, kAndroidCaptureTrigger);
if (!captureTriggerFromEnv.empty()) if (!captureTriggerFromEnv.empty())
{ {
mCaptureTrigger = atoi(captureTriggerFromEnv.c_str()); mCaptureTrigger = atoi(captureTriggerFromEnv.c_str());
...@@ -3671,14 +3589,16 @@ FrameCapture::FrameCapture() ...@@ -3671,14 +3589,16 @@ FrameCapture::FrameCapture()
INFO() << "Capture trigger detected, disabling capture start/end frame."; INFO() << "Capture trigger detected, disabling capture start/end frame.";
} }
std::string labelFromEnv = angle::GetEnvironmentVar(kCaptureLabel); std::string labelFromEnv =
GetEnvironmentVarOrAndroidProperty(kCaptureLabel, kAndroidCaptureLabel);
if (!labelFromEnv.empty()) if (!labelFromEnv.empty())
{ {
// Optional label to provide unique file names and namespaces // Optional label to provide unique file names and namespaces
mCaptureLabel = labelFromEnv; mCaptureLabel = labelFromEnv;
} }
std::string compressionFromEnv = angle::GetEnvironmentVar(kCompression); std::string compressionFromEnv =
GetEnvironmentVarOrAndroidProperty(kCompression, kAndroidCompression);
if (compressionFromEnv == "0") if (compressionFromEnv == "0")
{ {
mCompression = false; mCompression = false;
......
...@@ -2498,7 +2498,7 @@ void RendererVk::setGlobalDebugAnnotator() ...@@ -2498,7 +2498,7 @@ void RendererVk::setGlobalDebugAnnotator()
bool enableDebugAnnotatorVk = false; bool enableDebugAnnotatorVk = false;
if (vkCmdBeginDebugUtilsLabelEXT) if (vkCmdBeginDebugUtilsLabelEXT)
{ {
std::string enabled = angle::GetEnvironmentVarFromAndroidProperty( std::string enabled = angle::GetEnvironmentVarOrAndroidProperty(
kEnableDebugMarkersVarName, kEnableDebugMarkersPropertyName); kEnableDebugMarkersVarName, kEnableDebugMarkersPropertyName);
if (!enabled.empty() && enabled.compare("0") != 0) if (!enabled.empty() && enabled.compare("0") != 0)
{ {
......
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