112 typedef TContextProvider TContextProviderType;
113 typedef TEventFilter TEventFilterType;
114 typedef typename TBaseType::TMutexType TMutexType;
115 typedef typename TBaseType::TScopedLockType TScopedLockType;
122 uint64_t mLastTimestamp;
123 TContextProvider mContextProvider;
124 TEventFilterType mEventFilter;
128 , uint32_t inBufferFullAmount
129 ,
const TContextProvider& inProvider
130 , TMutexType* inBufferMutex
131 ,
const TEventFilterType& inEventFilter )
132 :
TBaseType( inFoundation, inBufferFullAmount, inBufferMutex,
"struct physx::profile::ProfileEvent" )
133 , mLastTimestamp( 0 )
134 , mContextProvider( inProvider )
135 , mEventFilter( inEventFilter )
140 TContextProvider& getContextProvider() {
return mContextProvider; }
142 PX_FORCE_INLINE void startEvent(uint16_t inId, uint32_t threadId, uint64_t contextId, uint8_t cpuId, uint8_t threadPriority, uint64_t inTimestamp)
144 TScopedLockType lock(TBaseType::mBufferMutex);
145 if ( mEventFilter.isEventEnabled( inId ) )
148 theEvent.init( threadId, contextId, cpuId, threadPriority, inTimestamp );
149 doAddProfileEvent( inId, theEvent );
156 startEvent( inId, ctx.mThreadId, contextId, ctx.mCpuId,
static_cast<uint8_t
>(ctx.mThreadPriority), PxTime::getCurrentCounterValue() );
159 PX_FORCE_INLINE void startEvent(uint16_t inId, uint64_t contextId, uint32_t threadId)
161 startEvent( inId, threadId, contextId, 0, 0, PxTime::getCurrentCounterValue() );
164 PX_FORCE_INLINE void stopEvent(uint16_t inId, uint32_t threadId, uint64_t contextId, uint8_t cpuId, uint8_t threadPriority, uint64_t inTimestamp)
166 TScopedLockType lock(TBaseType::mBufferMutex);
167 if ( mEventFilter.isEventEnabled( inId ) )
170 theEvent.init( threadId, contextId, cpuId, threadPriority, inTimestamp );
171 doAddProfileEvent( inId, theEvent );
178 stopEvent( inId, ctx.mThreadId, contextId, ctx.mCpuId,
static_cast<uint8_t
>(ctx.mThreadPriority), PxTime::getCurrentCounterValue() );
181 PX_FORCE_INLINE void stopEvent(uint16_t inId, uint64_t contextId, uint32_t threadId)
183 stopEvent( inId, threadId, contextId, 0, 0, PxTime::getCurrentCounterValue() );
186 inline void eventValue( uint16_t inId, uint64_t contextId, int64_t inValue )
188 eventValue( inId, mContextProvider.getThreadId(), contextId, inValue );
191 inline void eventValue( uint16_t inId, uint32_t threadId, uint64_t contextId, int64_t inValue )
193 TScopedLockType lock( TBaseType::mBufferMutex );
195 theEvent.init( inValue, contextId, threadId );
196 EventHeader theHeader(
static_cast<uint8_t
>( getEventType<EventValue>() ), inId );
199 theType.setupHeader( theHeader );
200 sendEvent( theHeader, theType );
203 void flushProfileEvents()
205 TBaseType::flushEvents();
210 PX_PROFILE_DELETE( TBaseType::mWrapper.mUserFoundation,
this );
216 void clearCachedData()
218 mEventContextInformation.setToDefault();
222 template<
typename TProfileEventType>
223 PX_FORCE_INLINE void doAddProfileEvent(uint16_t eventId,
const TProfileEventType& inType)
225 TScopedLockType lock(TBaseType::mBufferMutex);
226 if (mEventContextInformation == inType.mContextInformation)
227 doAddEvent(
static_cast<uint8_t
>(inType.getRelativeEventType()), eventId, inType.getRelativeEvent());
230 mEventContextInformation = inType.mContextInformation;
231 doAddEvent(
static_cast<uint8_t
>( getEventType<TProfileEventType>() ), eventId, inType );
235 template<
typename TDataType>
236 PX_FORCE_INLINE void doAddEvent(uint8_t inEventType, uint16_t eventId,
const TDataType& inType)
240 TDataType& theType(
const_cast<TDataType&
>( inType ) );
241 uint64_t currentTs = inType.getTimestamp();
242 theType.setupHeader(theHeader, mLastTimestamp);
243 mLastTimestamp = currentTs;
244 sendEvent( theHeader, theType );
247 template<
typename TDataType>
250 uint32_t sizeToWrite =
sizeof(inHeader) + inType.getEventSize(inHeader);
251 PX_UNUSED(sizeToWrite);
253 uint32_t writtenSize = inHeader.streamify( TBaseType::mSerializer );
254 writtenSize += inType.streamify(TBaseType::mSerializer, inHeader);
256 PX_ASSERT(writtenSize == sizeToWrite);
258 if ( TBaseType::mDataArray.size() >= TBaseType::mBufferFullAmount )
259 flushProfileEvents();