diff options
| author | kaizhangNV <149626564+kaizhangNV@users.noreply.github.com> | 2024-06-04 18:24:12 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-04 18:24:12 -0700 |
| commit | bacf73cc68af8b7654cc920b07635f926b785b84 (patch) | |
| tree | 23b466be471d1c188ce893f4ce2b934e7f6a2b77 /source/slang/slang.cpp | |
| parent | 1141b8243c4ff00c59e927b0c33dbffaea29db4c (diff) | |
Add APIs to get profile of compile time (#4242)
* Add APIs to get profile of compile time
Add serial time measurement
Add profiler to measure lots of stages in slang compilation, and it
can accumulate the time spent in each thread in multi-threads case and
finally report a serial timing info.
* Add invocation times to the profiler
* Simplify the profiler and provide a 'clear' option
Change the profiler design to only return the thread_local
profiler to user.
We create a ISlangProfiler interface to carry the thread_local
variable PerformanceProfilerImpl profiler to user.
In addition, we provide a new option in the input parameter to
control whether or not user want to clear the previous profile
data. So spGetCompileProfile() can always returns a fresh new
profiling data.
* Change to use slang container List
Stop using std::vector, instead use slang's container List.
Generate a UUID for ISlangProfiler
Diffstat (limited to 'source/slang/slang.cpp')
| -rw-r--r-- | source/slang/slang.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp index 66e75a282..f820bf8cd 100644 --- a/source/slang/slang.cpp +++ b/source/slang/slang.cpp @@ -6245,6 +6245,25 @@ void const* EndToEndCompileRequest::getEntryPointCode(int entryPointIndex, size_ return (void*)blob->getBufferPointer(); } +SlangResult EndToEndCompileRequest::getCompileTimeProfile(ISlangProfiler** compileTimeProfile, bool shouldClear) +{ + if (compileTimeProfile == nullptr) + { + return SLANG_E_INVALID_ARG; + } + + SlangProfiler* profiler = new SlangProfiler(PerformanceProfiler::getProfiler()); + + if (shouldClear) + { + PerformanceProfiler::getProfiler()->clear(); + } + + ComPtr<ISlangProfiler> result(profiler); + *compileTimeProfile = result.detach(); + return SLANG_OK; +} + static SlangResult _getEntryPointResult( EndToEndCompileRequest* req, int entryPointIndex, |
