Vulkan/Debug: Don't accumulate function breakpoints A `SetFunctionBreakpointsRequest` contains the full list of breakpoints. Clear the list in the context before adding the new list. Also add a `getFunctionBreakpoints()` accessor so you can enumerate the list of function breakpoints. Bug: b/145351270 Change-Id: Ia7fad403eace7a95a15671e2ce90b8e083da3ce7 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/48694 Tested-by: Ben Clayton <bclayton@google.com> Kokoro-Result: kokoro <noreply+kokoro@google.com> Reviewed-by: Antonio Maiorano <amaiorano@google.com>
diff --git a/src/Vulkan/Debug/Context.cpp b/src/Vulkan/Debug/Context.cpp index b311e2f..2a9916e 100644 --- a/src/Vulkan/Debug/Context.cpp +++ b/src/Vulkan/Debug/Context.cpp
@@ -399,6 +399,11 @@ return ctx->variables.get(id); } +void Context::Lock::clearFunctionBreakpoints() +{ + ctx->functionBreakpoints.clear(); +} + void Context::Lock::addFunctionBreakpoint(const std::string &name) { ctx->functionBreakpoints.emplace(name); @@ -414,5 +419,10 @@ return ctx->functionBreakpoints.count(name) > 0; } +std::unordered_set<std::string> Context::Lock::getFunctionBreakpoints() +{ + return ctx->functionBreakpoints; +} + } // namespace dbg } // namespace vk
diff --git a/src/Vulkan/Debug/Context.hpp b/src/Vulkan/Debug/Context.hpp index 64e7e55..acc3ea2 100644 --- a/src/Vulkan/Debug/Context.hpp +++ b/src/Vulkan/Debug/Context.hpp
@@ -19,6 +19,7 @@ #include <memory> #include <string> +#include <unordered_set> #include <vector> namespace vk { @@ -118,6 +119,9 @@ // references. std::shared_ptr<Variables> get(ID<Variables>); + // clearFunctionBreakpoints() removes all function breakpoints. + void clearFunctionBreakpoints(); + // addFunctionBreakpoint() adds a breakpoint to the start of the // function with the given name. void addFunctionBreakpoint(const std::string &name); @@ -131,6 +135,9 @@ // name has a function breakpoint set. bool isFunctionBreakpoint(const std::string &name); + // getFunctionBreakpoints() returns all the set function breakpoints. + std::unordered_set<std::string> getFunctionBreakpoints(); + private: Lock(const Lock &) = delete; Lock &operator=(const Lock &) = delete;
diff --git a/src/Vulkan/Debug/Server.cpp b/src/Vulkan/Debug/Server.cpp index 9dd05ce..b89a79d 100644 --- a/src/Vulkan/Debug/Server.cpp +++ b/src/Vulkan/Debug/Server.cpp
@@ -115,6 +115,7 @@ } { auto lock = ctx->lock(); + lock.clearFunctionBreakpoints(); for(auto const &reqBP : req.breakpoints) { lock.addFunctionBreakpoint(reqBP.name.c_str());