Commit 505a8d05 by Jamie Madill Committed by Commit Bot

Capture/Replay: Split very large replay function.

This allows a replay of the T-Rex offscreen benchmark. Bug: angleproject:5133 Change-Id: I9998c4785e61a6410863a1cd8a8a569b1e08098a Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2446897 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCourtney Goeltzenleuchter <courtneygo@google.com> Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com>
parent c15d1e2d
...@@ -230,23 +230,31 @@ enum class ReplayFunc ...@@ -230,23 +230,31 @@ enum class ReplayFunc
Reset, Reset,
}; };
constexpr uint32_t kNoPartId = std::numeric_limits<uint32_t>::max();
struct FmtReplayFunction struct FmtReplayFunction
{ {
FmtReplayFunction(gl::ContextID contextIdIn, uint32_t frameIndexIn) FmtReplayFunction(gl::ContextID contextIdIn,
: contextId(contextIdIn), frameIndex(frameIndexIn) uint32_t frameIndexIn,
uint32_t partIdIn = kNoPartId)
: contextId(contextIdIn), frameIndex(frameIndexIn), partId(partIdIn)
{} {}
gl::ContextID contextId; gl::ContextID contextId;
uint32_t frameIndex; uint32_t frameIndex;
uint32_t partId;
}; };
std::ostream &operator<<(std::ostream &os, const FmtReplayFunction &fmt) std::ostream &operator<<(std::ostream &os, const FmtReplayFunction &fmt)
{ {
os << "ReplayContext" << static_cast<int>(fmt.contextId) << "Frame" << fmt.frameIndex << "()"; os << "ReplayContext" << static_cast<int>(fmt.contextId) << "Frame" << fmt.frameIndex;
if (fmt.partId != kNoPartId)
{
os << "Part" << fmt.partId;
}
os << "()";
return os; return os;
} }
constexpr uint32_t kNoPartId = std::numeric_limits<uint32_t>::max();
struct FmtSetupFunction struct FmtSetupFunction
{ {
FmtSetupFunction(gl::ContextID contextIdIn, uint32_t partIdIn) FmtSetupFunction(gl::ContextID contextIdIn, uint32_t partIdIn)
...@@ -301,7 +309,7 @@ std::ostream &operator<<(std::ostream &os, const FmtFunction &fmt) ...@@ -301,7 +309,7 @@ std::ostream &operator<<(std::ostream &os, const FmtFunction &fmt)
switch (fmt.funcType) switch (fmt.funcType)
{ {
case ReplayFunc::Replay: case ReplayFunc::Replay:
os << FmtReplayFunction(fmt.contextId, fmt.frameIndex); os << FmtReplayFunction(fmt.contextId, fmt.frameIndex, fmt.partId);
break; break;
case ReplayFunc::Setup: case ReplayFunc::Setup:
...@@ -1114,21 +1122,19 @@ void WriteCppReplay(bool compression, ...@@ -1114,21 +1122,19 @@ void WriteCppReplay(bool compression,
out << "\n"; out << "\n";
} }
out << "void " << FmtReplayFunction(context->id(), frameIndex) << "\n"; {
out << "{\n"; std::stringstream callStream;
callStream << "void " << FmtReplayFunction(context->id(), frameIndex) << "\n";
callStream << "{\n";
std::stringstream callStream; WriteCppReplayFunctionWithParts(context, ReplayFunc::Replay, &dataTracker, frameIndex,
binaryData, frameCalls, header, callStream, out);
for (const CallCapture &call : frameCalls) out << callStream.str();
{ out << "}\n";
callStream << " ";
WriteCppReplayForCall(call, &dataTracker, callStream, header, binaryData);
callStream << ";\n";
} }
out << callStream.str();
out << "}\n";
if (serializeStateEnabled) if (serializeStateEnabled)
{ {
gl::BinaryOutputStream serializedContextData{}; gl::BinaryOutputStream serializedContextData{};
......
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