Skip to content

Commit 36c26fe

Browse files
committed
improve open session c-api endpoint
added service action to query introspection shm name reworked open session with custom names to on require control pipe name moved custom open to the public api
1 parent 5814078 commit 36c26fe

24 files changed

+148
-113
lines changed

IntelPresentMon/Core/source/cli/CliOptions.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ namespace p2c::cli
2121
private: Group gd_{ this, "Debugging", "Aids in debugging this tool" }; public:
2222
Option<std::string> url{ this, "--p2c-url", "", "URL to load instead of app files" };
2323
Option<std::string> controlPipe{ this, "--p2c-control-pipe", R"(\\.\pipe\pm-ctrl)", "Named pipe to connect to the service with" };
24-
Option<std::string> shmName{ this, "--p2c-shm-name", "pm-intro-shm", "Shared memory to connect to the service with" };
2524
Option<std::string> etwSessionName{ this, "--p2c-etw-session-name", "pm-child-etw-session", "ETW session name when lauching service as child" };
2625
Flag svcAsChild{ this, "--p2c-svc-as-child", "Launch service as child console app" };
26+
Option<std::string> shmName{ this, "--p2c-shm-name", "pm-intro-shm", "Shared memory to use when launching service as child" };
2727
Flag noNetFail{ this, "--p2c-no-net-fail", "Disable error modal for bad url accesses" };
2828
Flag debugWaitRender{ this, "--p2c-debug-wait-render", "Force all render child processes to wait for debugger connection" };
2929
Flag debugWaitClient{ this, "--p2c-debug-wait-client", "Force main client process to wait for debugger connection" };

IntelPresentMon/Core/source/kernel/Kernel.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -160,15 +160,13 @@ namespace p2c::kern
160160

161161
// connection names control from cli override / svc-as-child
162162
auto controlPipe = opt.controlPipe.AsOptional();
163-
auto shmName = opt.shmName.AsOptional();
164163
// force optionals filled with default values if not specified when launching service as child
165164
if (opt.svcAsChild) {
166165
controlPipe = *opt.controlPipe;
167-
shmName = *opt.shmName;
168166
}
169167

170168
// create the PresentMon object
171-
try { pm.emplace(controlPipe, shmName); }
169+
try { pm.emplace(controlPipe); }
172170
catch (...) {
173171
pHandler->OnPresentmonInitFailed();
174172
pmlog_error("Failed to init presentmon api").no_trace();

IntelPresentMon/Core/source/pmon/PresentMon.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,19 +30,18 @@ namespace p2c::pmon
3030
BlobContainer blobs_;
3131
};
3232

33-
PresentMon::PresentMon(std::optional<std::string> namedPipeName, std::optional<std::string> sharedMemoryName, double window_in, double offset_in, uint32_t telemetrySamplePeriodMs_in)
33+
PresentMon::PresentMon(std::optional<std::string> namedPipeName, double window_in, double offset_in, uint32_t telemetrySamplePeriodMs_in)
3434
{
3535
const auto RemoveDoubleQuotes = [](std::string s) {
3636
if (s.front() == '"' && s.back() == '"' && s.size() >= 2) {
3737
s = s.substr(1, s.size() - 2);
3838
}
3939
return s;
4040
};
41-
if (namedPipeName && sharedMemoryName) {
41+
if (namedPipeName) {
4242
auto pipeName = RemoveDoubleQuotes(*namedPipeName);
43-
auto shmName = RemoveDoubleQuotes(*sharedMemoryName);
44-
pmlog_info(std::format("Connecting to service with custom pipe [{}] and nsm [{}]", pipeName, shmName));
45-
pSession = std::make_unique<pmapi::Session>(std::move(pipeName), std::move(shmName));
43+
pmlog_info(std::format("Connecting to service with custom pipe [{}]", pipeName));
44+
pSession = std::make_unique<pmapi::Session>(std::move(pipeName));
4645
}
4746
else {
4847
pmlog_info("Connecting to service with default pipe name");

IntelPresentMon/Core/source/pmon/PresentMon.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ namespace p2c::pmon
2525
{
2626
public:
2727
// functions
28-
PresentMon(std::optional<std::string> namedPipeName, std::optional<std::string> sharedMemoryName, double window = 1000., double offset = 1000., uint32_t telemetrySampleRateMs = 16);
28+
PresentMon(std::optional<std::string> namedPipeName, double window = 1000., double offset = 1000., uint32_t telemetrySampleRateMs = 16);
2929
~PresentMon();
3030
void StartTracking(uint32_t pid_);
3131
void StopTracking();

IntelPresentMon/PresentMonAPI2/Internal.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,6 @@
88
#include <memory>
99
#include <functional>
1010

11-
#ifdef __cplusplus
12-
extern "C" {
13-
#endif
14-
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSession_(PM_SESSION_HANDLE* pHandle, const char* pipeNameOverride, const char* introNsmOverride);
15-
#ifdef __cplusplus
16-
}
17-
#endif
1811

1912
// testing support functions
2013
PRESENTMON_API2_EXPORT _CrtMemState pmCreateHeapCheckpoint_();

IntelPresentMon/PresentMonAPI2/PresentMonAPI.cpp

Lines changed: 22 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -60,35 +60,6 @@ PRESENTMON_API2_EXPORT _CrtMemState pmCreateHeapCheckpoint_()
6060
return s;
6161
}
6262

63-
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSession_(PM_SESSION_HANDLE* pHandle, const char* pipeNameOverride, const char* introNsmOverride)
64-
{
65-
try {
66-
if (!pHandle) {
67-
pmlog_error("null session handle outptr").diag();
68-
return PM_STATUS_BAD_ARGUMENT;
69-
}
70-
std::shared_ptr<Middleware> pMiddleware;
71-
std::optional<std::string> pipeName;
72-
std::optional<std::string> introNsm;
73-
if (pipeNameOverride) {
74-
pipeName = std::string(pipeNameOverride);
75-
}
76-
if (introNsmOverride) {
77-
introNsm = std::string(introNsmOverride);
78-
}
79-
pMiddleware = std::make_shared<ConcreteMiddleware>(std::move(pipeName), std::move(introNsm));
80-
*pHandle = pMiddleware.get();
81-
handleMap_[*pHandle] = std::move(pMiddleware);
82-
pmlog_info("Middleware successfully opened session with service");
83-
return PM_STATUS_SUCCESS;
84-
}
85-
catch (...) {
86-
const auto code = util::GeneratePmStatus();
87-
pmlog_error(util::ReportException()).code(code);
88-
return code;
89-
}
90-
}
91-
9263
PRESENTMON_API2_EXPORT LoggingSingletons pmLinkLogging_(
9364
std::shared_ptr<pmon::util::log::IChannel> pChannel,
9465
std::function<pmon::util::log::IdentificationTable&()> getIdTable)
@@ -146,10 +117,31 @@ PRESENTMON_API2_EXPORT void pmSetupODSLogging_(PM_DIAGNOSTIC_LEVEL logLevel,
146117
(pmon::util::log::Level)stackTraceLevel, exceptionTrace);
147118
}
148119

120+
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSessionWithPipe(PM_SESSION_HANDLE* pHandle, const char* pipe)
121+
{
122+
try {
123+
if (!pHandle) {
124+
pmlog_error("null session handle outptr").diag();
125+
return PM_STATUS_BAD_ARGUMENT;
126+
}
127+
std::shared_ptr<Middleware> pMiddleware;
128+
pMiddleware = std::make_shared<ConcreteMiddleware>(pipe ? std::optional<std::string>{ pipe } : std::nullopt);
129+
*pHandle = pMiddleware.get();
130+
handleMap_[*pHandle] = std::move(pMiddleware);
131+
pmlog_info("Middleware successfully opened session with service");
132+
return PM_STATUS_SUCCESS;
133+
}
134+
catch (...) {
135+
const auto code = util::GeneratePmStatus();
136+
pmlog_error(util::ReportException()).code(code);
137+
return code;
138+
}
139+
}
140+
149141
// public endpoints
150142
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSession(PM_SESSION_HANDLE* pHandle)
151143
{
152-
return pmOpenSession_(pHandle, nullptr, nullptr);
144+
return pmOpenSessionWithPipe(pHandle, nullptr);
153145
}
154146

155147
PRESENTMON_API2_EXPORT PM_STATUS pmCloseSession(PM_SESSION_HANDLE handle)

IntelPresentMon/PresentMonAPI2/PresentMonAPI.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,7 @@ extern "C" {
367367
typedef struct PM_SESSION* PM_SESSION_HANDLE;
368368

369369
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSession(PM_SESSION_HANDLE* pHandle);
370+
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSessionWithPipe(PM_SESSION_HANDLE* pHandle, const char* controlPipeName);
370371
PRESENTMON_API2_EXPORT PM_STATUS pmCloseSession(PM_SESSION_HANDLE handle);
371372
PRESENTMON_API2_EXPORT PM_STATUS pmStartTrackingProcess(PM_SESSION_HANDLE handle, uint32_t process_id);
372373
PRESENTMON_API2_EXPORT PM_STATUS pmStopTrackingProcess(PM_SESSION_HANDLE handle, uint32_t process_id);

IntelPresentMon/PresentMonAPI2Loader/Implementation.cpp

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ class LoaderError_ : public pmon::ipc::PmStatusError
2424

2525
// pointers to runtime-resolved core API functions
2626
PM_STATUS(*pFunc_pmOpenSession_)(PM_SESSION_HANDLE*) = nullptr;
27+
PM_STATUS(*pFunc_pmOpenSessionWithPipe_)(PM_SESSION_HANDLE* pHandle, const char*) = nullptr;
2728
PM_STATUS(*pFunc_pmCloseSession_)(PM_SESSION_HANDLE) = nullptr;
2829
PM_STATUS(*pFunc_pmStartTrackingProcess_)(PM_SESSION_HANDLE, uint32_t) = nullptr;
2930
PM_STATUS(*pFunc_pmStopTrackingProcess_)(PM_SESSION_HANDLE, uint32_t) = nullptr;
@@ -53,7 +54,6 @@ PM_STATUS(*pFunc_pmDiagnosticUnblockWaitingThread_)() = nullptr;
5354
PM_STATUS(*pFunc_pmSetupFileLogging_)(const char*, PM_DIAGNOSTIC_LEVEL,
5455
PM_DIAGNOSTIC_LEVEL, bool) = nullptr;
5556
// pointers to runtime-resolved internal functions
56-
PM_STATUS(*pFunc_pmOpenSession__)(PM_SESSION_HANDLE* pHandle, const char*, const char*) = nullptr;
5757
_CrtMemState(*pFunc_pmCreateHeapCheckpoint__)() = nullptr;
5858
LoggingSingletons(*pFunc_pmLinkLogging__)(std::shared_ptr<pmon::util::log::IChannel>,
5959
std::function<pmon::util::log::IdentificationTable&()>) = nullptr;
@@ -143,6 +143,7 @@ PRESENTMON_API2_EXPORT PM_STATUS LoadLibrary_()
143143
}
144144
// core
145145
RESOLVE(pmOpenSession);
146+
RESOLVE(pmOpenSessionWithPipe);
146147
RESOLVE(pmCloseSession);
147148
RESOLVE(pmStartTrackingProcess);
148149
RESOLVE(pmStopTrackingProcess);
@@ -170,8 +171,7 @@ PRESENTMON_API2_EXPORT PM_STATUS LoadLibrary_()
170171
RESOLVE(pmDiagnosticUnblockWaitingThread);
171172
RESOLVE(pmSetupFileLogging);
172173
// internal
173-
RESOLVE(pmOpenSession_); // !!
174-
RESOLVE_CPP(pmCreateHeapCheckpoint_); // ??
174+
RESOLVE_CPP(pmCreateHeapCheckpoint_);
175175
RESOLVE_CPP(pmLinkLogging_);
176176
RESOLVE_CPP(pmFlushEntryPoint_);
177177
RESOLVE_CPP(pmSetupODSLogging_);
@@ -201,6 +201,11 @@ PRESENTMON_API2_EXPORT PM_STATUS pmOpenSession(PM_SESSION_HANDLE* pHandle)
201201
LoadEndpointsIfEmpty_();
202202
return pFunc_pmOpenSession_(pHandle);
203203
}
204+
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSessionWithPipe(PM_SESSION_HANDLE* pHandle, const char* pipeNameOverride)
205+
{
206+
LoadEndpointsIfEmpty_();
207+
return pFunc_pmOpenSessionWithPipe_(pHandle, pipeNameOverride);
208+
}
204209
PRESENTMON_API2_EXPORT PM_STATUS pmCloseSession(PM_SESSION_HANDLE handle)
205210
{
206211
LoadEndpointsIfEmpty_();
@@ -276,12 +281,6 @@ PRESENTMON_API2_EXPORT PM_STATUS pmGetApiVersion(PM_VERSION* pVersion)
276281
LoadEndpointsIfEmpty_();
277282
return pFunc_pmGetApiVersion_(pVersion);
278283
}
279-
// expose
280-
PRESENTMON_API2_EXPORT PM_STATUS pmOpenSession_(PM_SESSION_HANDLE* pHandle, const char* pipeNameOverride, const char* introNsmOverride)
281-
{
282-
LoadEndpointsIfEmpty_();
283-
return pFunc_pmOpenSession__(pHandle, pipeNameOverride, introNsmOverride);
284-
}
285284
// deprecate?
286285
PRESENTMON_API2_EXPORT _CrtMemState pmCreateHeapCheckpoint_()
287286
{

0 commit comments

Comments
 (0)