Commit 248d754a by Cody Northrop Committed by Commit Bot

Capture/Replay: Limit string lengths in capture

MSVC can't handle string lengths longer than 16380 according to: https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2026 Example build failure without this CL: https://logs.chromium.org/logs/angle/buildbucket/cr-buildbucket.appspot.com/8873410048312858000/+/steps/compile_with_ninja/0/stdout Test: Compile NBA2K20 MEC with MSVC Bug: b/160014453 Bug: angleproject:4048 Change-Id: Ie14d40e8c3eea35d08d4be32455b327a311f1bcc Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2327702 Commit-Queue: Cody Northrop <cnorthrop@google.com> Reviewed-by: 's avatarManh Nguyen <nguyenmh@google.com> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
parent a9504808
...@@ -58,6 +58,9 @@ constexpr char kSerializeStateEnabledVarName[] = "ANGLE_CAPTURE_SERIALIZE_STATE" ...@@ -58,6 +58,9 @@ constexpr char kSerializeStateEnabledVarName[] = "ANGLE_CAPTURE_SERIALIZE_STATE"
constexpr size_t kBinaryAlignment = 16; constexpr size_t kBinaryAlignment = 16;
constexpr size_t kFunctionSizeLimit = 50000; constexpr size_t kFunctionSizeLimit = 50000;
// Limit based on MSVC Compiler Error C2026
constexpr size_t kStringLengthLimit = 16380;
#if defined(ANGLE_PLATFORM_ANDROID) #if defined(ANGLE_PLATFORM_ANDROID)
constexpr char kAndroidCaptureEnabled[] = "debug.angle.capture.enabled"; constexpr char kAndroidCaptureEnabled[] = "debug.angle.capture.enabled";
...@@ -355,7 +358,15 @@ void WriteStringPointerParamReplay(DataCounters *counters, ...@@ -355,7 +358,15 @@ void WriteStringPointerParamReplay(DataCounters *counters,
// null terminate C style string // null terminate C style string
ASSERT(data.size() > 0 && data.back() == '\0'); ASSERT(data.size() > 0 && data.back() == '\0');
std::string str(data.begin(), data.end() - 1); std::string str(data.begin(), data.end() - 1);
header << " R\"(" << str << ")\",\n";
// Break up long strings for MSVC
for (size_t i = 0; i < str.length(); i += kStringLengthLimit)
{
size_t copyLength = ((str.length() - i) >= kStringLengthLimit) ? kStringLengthLimit
: (str.length() - i);
header << " R\"(" << str.substr(i, copyLength) << ")\"\n";
}
header << ",";
} }
header << " };\n"; header << " };\n";
......
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