Skip to content

Commit 2fb1dd4

Browse files
Add debug variable for logging drm_buffer object
Change-Id: Ida9635705172c1059b6adf4b6f55fdf4bc50c5b1
1 parent 55ba0ab commit 2fb1dd4

File tree

5 files changed

+55
-1
lines changed

5 files changed

+55
-1
lines changed

opencl/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
*/
77

88
#include "shared/source/os_interface/linux/drm_buffer_object.h"
9+
#include "shared/test/unit_test/helpers/debug_manager_state_restore.h"
910

1011
#include "opencl/test/unit_test/os_interface/linux/device_command_stream_fixture.h"
1112
#include "test.h"
@@ -136,6 +137,22 @@ TEST_F(DrmBufferObjectTest, onPinIoctlFailed) {
136137
EXPECT_EQ(EINVAL, ret);
137138
}
138139

140+
TEST_F(DrmBufferObjectTest, whenPrintExecutionBufferIsSetToTrueThenMessageFoundInStdStream) {
141+
mock->ioctl_expected.total = 1;
142+
DebugManagerStateRestore restore;
143+
DebugManager.flags.PrintExecutionBuffer.set(true);
144+
drm_i915_gem_exec_object2 execObjectsStorage = {};
145+
146+
testing::internal::CaptureStdout();
147+
auto ret = bo->exec(0, 0, 0, false, 1, nullptr, 0u, &execObjectsStorage);
148+
EXPECT_EQ(0, ret);
149+
150+
std::string output = testing::internal::GetCapturedStdout();
151+
auto idx = output.find("drm_i915_gem_execbuffer2 {");
152+
size_t expectedValue = 0;
153+
EXPECT_EQ(expectedValue, idx);
154+
}
155+
139156
TEST(DrmBufferObjectSimpleTest, givenInvalidBoWhenPinIsCalledThenErrorIsReturned) {
140157
std::unique_ptr<uint32_t[]> buff(new uint32_t[256]);
141158
std::unique_ptr<DrmMockCustom> mock(new DrmMockCustom);

opencl/test/unit_test/test_files/igdrcl.config

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,4 +164,5 @@ UseCommandBufferHeaderSizeForWddmQueueSubmission = 1
164164
OverridePreemptionSurfaceSizeInMb = -1
165165
OverrideLeastOccupiedBank = -1
166166
UseAsyncDrmExec = -1
167-
EnableMultiStorageResources = -1
167+
EnableMultiStorageResources = -1
168+
PrintExecutionBuffer = 0

shared/source/debug_settings/debug_variables_base.inl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ DECLARE_DEBUG_VARIABLE(bool, PrintTimestampPacketContents, false, "prints all ti
8989
DECLARE_DEBUG_VARIABLE(bool, WddmResidencyLogger, false, "gather Wddm residency statistics to file")
9090
DECLARE_DEBUG_VARIABLE(int32_t, PrintDriverDiagnostics, -1, "prints driver diagnostics messages to standard output, value corresponds to hint level")
9191
DECLARE_DEBUG_VARIABLE(bool, PrintDeviceAndEngineIdOnSubmission, false, "print submissions device and engine IDs to standard output")
92+
DECLARE_DEBUG_VARIABLE(bool, PrintExecutionBuffer, false, "print execution buffer information to standard output")
9293

9394
/*DIRECT SUBMISSION FLAGS*/
9495
DECLARE_DEBUG_VARIABLE(int32_t, EnableDirectSubmission, -1, "-1: default (disabled), 0: disable, 1:enable. Enables direct submission of command buffers bypassing KMD")

shared/source/os_interface/linux/drm_buffer_object.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ int BufferObject::exec(uint32_t used, size_t startOffset, unsigned int flags, bo
114114
execbuf.flags = flags;
115115
execbuf.rsvd1 = drmContextId;
116116

117+
if (DebugManager.flags.PrintExecutionBuffer.get()) {
118+
printExecutionBuffer(execbuf, residencyCount, execObjectsStorage);
119+
}
120+
117121
int ret = this->drm->ioctl(DRM_IOCTL_I915_GEM_EXECBUFFER2, &execbuf);
118122
if (ret == 0) {
119123
return 0;
@@ -124,6 +128,33 @@ int BufferObject::exec(uint32_t used, size_t startOffset, unsigned int flags, bo
124128
return err;
125129
}
126130

131+
void BufferObject::printExecutionBuffer(drm_i915_gem_execbuffer2 &execbuf, const size_t &residencyCount, drm_i915_gem_exec_object2 *execObjectsStorage) {
132+
std::string logger = "drm_i915_gem_execbuffer2 {\n";
133+
logger += " buffers_ptr: " + std::to_string(execbuf.buffers_ptr) + ",\n";
134+
logger += " buffer_count: " + std::to_string(execbuf.buffer_count) + ",\n";
135+
logger += " batch_start_offset: " + std::to_string(execbuf.batch_start_offset) + ",\n";
136+
logger += " batch_len: " + std::to_string(execbuf.batch_len) + ",\n";
137+
logger += " flags: " + std::to_string(execbuf.flags) + ",\n";
138+
logger += " rsvd1: " + std::to_string(execbuf.rsvd1) + ",\n";
139+
logger += "}\n";
140+
141+
for (size_t i = 0; i < residencyCount + 1; i++) {
142+
std::string temp = "drm_i915_gem_exec_object2 {\n";
143+
temp += " handle: " + std::to_string(execObjectsStorage[i].handle) + ",\n";
144+
temp += " relocation_count: " + std::to_string(execObjectsStorage[i].relocation_count) + ",\n";
145+
temp += " relocs_ptr: " + std::to_string(execObjectsStorage[i].relocs_ptr) + ",\n";
146+
temp += " alignment: " + std::to_string(execObjectsStorage[i].alignment) + ",\n";
147+
temp += " offset: " + std::to_string(execObjectsStorage[i].offset) + ",\n";
148+
temp += " flags: " + std::to_string(execObjectsStorage[i].flags) + ",\n";
149+
temp += " rsvd1: " + std::to_string(execObjectsStorage[i].rsvd1) + ",\n";
150+
temp += " rsvd2: " + std::to_string(execObjectsStorage[i].rsvd2) + ",\n";
151+
temp += " pad_to_size: " + std::to_string(execObjectsStorage[i].pad_to_size) + ",\n";
152+
temp += "}\n";
153+
logger += temp;
154+
}
155+
std::cout << logger << std::endl;
156+
}
157+
127158
int BufferObject::pin(BufferObject *const boToPin[], size_t numberOfBos, uint32_t drmContextId) {
128159
StackVec<drm_i915_gem_exec_object2, maxFragmentsCount + 1> execObject(numberOfBos + 1);
129160
return this->exec(4u, 0u, 0u, false, drmContextId, boToPin, numberOfBos, &execObject[0]);

shared/source/os_interface/linux/drm_buffer_object.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
*/
77

88
#pragma once
9+
#include "drm/i915_drm.h"
10+
911
#include <atomic>
1012
#include <cstddef>
1113
#include <stdint.h>
@@ -31,6 +33,8 @@ class BufferObject {
3133

3234
int exec(uint32_t used, size_t startOffset, unsigned int flags, bool requiresCoherency, uint32_t drmContextId, BufferObject *const residency[], size_t residencyCount, drm_i915_gem_exec_object2 *execObjectsStorage);
3335

36+
void printExecutionBuffer(drm_i915_gem_execbuffer2 &execbuf, const size_t &residencyCount, drm_i915_gem_exec_object2 *execObjectsStorage);
37+
3438
int wait(int64_t timeoutNs);
3539
bool close();
3640

0 commit comments

Comments
 (0)