diff --git a/opencl/source/command_queue/enqueue_common.h b/opencl/source/command_queue/enqueue_common.h index 2fb7015f1b..cc471f3109 100644 --- a/opencl/source/command_queue/enqueue_common.h +++ b/opencl/source/command_queue/enqueue_common.h @@ -1121,7 +1121,7 @@ CompletionStamp CommandQueueHw::enqueueCommandWithoutKernel( if (eventBuilder.getEvent() && isProfilingEnabled() && !isBcsSplitInitialized()) { auto event = eventBuilder.getEvent(); event->setSubmitTimeStamp(); - if (enqueueProperties.isStartTimestampOnCpuRequired()) { + if (enqueueProperties.isStartTimestampOnCpuRequired() || !getGpgpuCommandStreamReceiver().peekTimestampPacketWriteEnabled()) { event->setStartTimeStamp(); } } diff --git a/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp b/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp index 3084841910..46f7ba1a10 100644 --- a/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp +++ b/opencl/test/unit_test/command_queue/enqueue_command_without_kernel_tests.cpp @@ -373,7 +373,7 @@ HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationWhenEnqueueCommandWithoutKern EXPECT_TRUE(mockCsr->passedDispatchFlags.isStallingCommandsOnNextFlushRequired); } -HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledWhenEnqueueCommandWithoutKernelThenStartTimeStampNotSet) { +HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledAndTimeStampPacketsEnabledWhenEnqueueCommandWithoutKernelThenStartTimeStampNotSet) { using CsrType = MockCsrHw2; setUpImpl(); REQUIRE_FULL_BLITTER_OR_SKIP(device->getRootDeviceEnvironment()); @@ -400,7 +400,8 @@ HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledWhenEnqueu EXPECT_EQ(ev->startTimeStamp.cpuTimeInNs, 0u); EXPECT_EQ(ev->startTimeStamp.gpuTimeInNs, 0u); EXPECT_EQ(ev->startTimeStamp.gpuTimeStamp, 0u); - + auto &csr = device->getUltCommandStreamReceiver(); + csr.timestampPacketWriteEnabled = true; mockCmdQ->enqueueCommandWithoutKernel(nullptr, 0, &mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies, eventsRequest, eventBuilder, 0, csrDeps, &bcsCsr, false); @@ -414,6 +415,48 @@ HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledWhenEnqueu delete ev; } +HWTEST_F(DispatchFlagsBlitTests, givenBlitOperationAndProfilingEnabledAndTimeStampPacketsDisabledWhenEnqueueCommandWithoutKernelThenStartTimeStampIsSet) { + using CsrType = MockCsrHw2; + setUpImpl(); + REQUIRE_FULL_BLITTER_OR_SKIP(device->getRootDeviceEnvironment()); + cl_queue_properties properties[3] = {CL_QUEUE_PROPERTIES, CL_QUEUE_PROFILING_ENABLE, 0}; + auto mockCmdQ = std::make_unique>(context.get(), device.get(), properties); + auto &bcsCsr = *mockCmdQ->bcsEngines[0]->commandStreamReceiver; + + auto blocking = true; + TimestampPacketDependencies timestampPacketDependencies; + EventsRequest eventsRequest(0, nullptr, nullptr); + EventBuilder eventBuilder; + eventBuilder.create>(mockCmdQ.get(), CL_COMMAND_USER, CompletionStamp::notReady, CompletionStamp::notReady); + auto ev = static_cast *>(eventBuilder.getEvent()); + ev->setProfilingEnabled(true); + + CsrDependencies csrDeps; + BlitPropertiesContainer blitPropertiesContainer; + EnqueueProperties enqueueProperties(true, false, false, false, false, false, &blitPropertiesContainer); + + EXPECT_EQ(ev->submitTimeStamp.cpuTimeInNs, 0u); + EXPECT_EQ(ev->submitTimeStamp.gpuTimeInNs, 0u); + EXPECT_EQ(ev->submitTimeStamp.gpuTimeStamp, 0u); + + EXPECT_EQ(ev->startTimeStamp.cpuTimeInNs, 0u); + EXPECT_EQ(ev->startTimeStamp.gpuTimeInNs, 0u); + EXPECT_EQ(ev->startTimeStamp.gpuTimeStamp, 0u); + auto &csr = device->getUltCommandStreamReceiver(); + csr.timestampPacketWriteEnabled = false; + mockCmdQ->enqueueCommandWithoutKernel(nullptr, 0, &mockCmdQ->getCS(0), 0, blocking, enqueueProperties, timestampPacketDependencies, + eventsRequest, eventBuilder, 0, csrDeps, &bcsCsr, false); + + EXPECT_NE(ev->submitTimeStamp.cpuTimeInNs, 0u); + EXPECT_NE(ev->submitTimeStamp.gpuTimeInNs, 0u); + EXPECT_NE(ev->submitTimeStamp.gpuTimeStamp, 0u); + + EXPECT_NE(ev->startTimeStamp.cpuTimeInNs, 0u); + EXPECT_NE(ev->startTimeStamp.gpuTimeInNs, 0u); + EXPECT_NE(ev->startTimeStamp.gpuTimeStamp, 0u); + delete ev; +} + HWTEST_F(DispatchFlagsBlitTests, givenN1EnabledWhenDispatchingWithoutKernelThenAllowOutOfOrderExecution) { using CsrType = MockCsrHw2; debugManager.flags.EnableTimestampPacket.set(1);