From 0942edd6afc35af0c236cc3702345edcd3a6ddad Mon Sep 17 00:00:00 2001 From: "Hoppe, Mateusz" Date: Sat, 10 Nov 2018 22:25:48 +0100 Subject: [PATCH] Update aub_stream headers - pass hwInfo and localMemoryEnabled to AubCenter ctor - initialize AubCenter in Platform:intialize() when Device is created - only when CSR is not CsrHw - move aub_center files to runtime/aub directory Change-Id: Iceb4bf1cb2bb55b42d438502cca667a449f11411 --- CMakeLists.txt | 6 +-- runtime/aub/CMakeLists.txt | 2 + runtime/aub/aub_center.cpp | 21 ++++++++ runtime/{command_stream => aub}/aub_center.h | 11 +---- runtime/aub_mem_dump/aub_stream_stubs.cpp | 38 +-------------- runtime/command_stream/CMakeLists.txt | 1 - .../aub_command_stream_receiver_hw.h | 2 +- .../aub_command_stream_receiver_hw.inl | 2 +- .../execution_environment.cpp | 6 +-- .../execution_environment.h | 2 +- runtime/platform/platform.cpp | 6 +++ third_party/aub_stream/headers/aub_manager.h | 48 ++----------------- third_party/aub_stream/headers/aub_streamer.h | 29 ----------- .../aub_stream/headers/hardware_context.h | 21 ++++++++ unit_tests/aub/CMakeLists.txt | 11 +++++ unit_tests/aub/aub_center_tests.cpp | 19 +++----- .../aub_center_using_aubstream_lib_tests.cpp | 24 ++++++++++ ...aub_center_using_aubstream_stubs_tests.cpp | 24 ++++++++++ .../execution_environment_tests.cpp | 8 ++-- unit_tests/mocks/CMakeLists.txt | 2 + unit_tests/mocks/mock_aub_center.h | 15 ++++++ unit_tests/mocks/mock_execution_environment.h | 20 ++++++++ unit_tests/platform/platform_tests.cpp | 31 ++++++++++++ 23 files changed, 205 insertions(+), 144 deletions(-) create mode 100644 runtime/aub/aub_center.cpp rename runtime/{command_stream => aub}/aub_center.h (74%) delete mode 100644 third_party/aub_stream/headers/aub_streamer.h create mode 100644 third_party/aub_stream/headers/hardware_context.h create mode 100644 unit_tests/aub/aub_center_using_aubstream_lib_tests.cpp create mode 100644 unit_tests/aub/aub_center_using_aubstream_stubs_tests.cpp create mode 100644 unit_tests/mocks/mock_aub_center.h create mode 100644 unit_tests/mocks/mock_execution_environment.h diff --git a/CMakeLists.txt b/CMakeLists.txt index c8196f75d3..8ee872405f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,9 +113,9 @@ else() endif() if(NOT DEFINED AUB_STREAM_DIR) - get_filename_component(TEMP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/aub_stream/aub_mem_dump" ABSOLUTE) + get_filename_component(TEMP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../aub_stream/aub_mem_dump" ABSOLUTE) if(IS_DIRECTORY ${TEMP_DIR}) - set(AUB_STREAM_DIR "${CMAKE_CURRENT_SOURCE_DIR}/third_party/aub_stream/aub_mem_dump") + set(AUB_STREAM_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../aub_stream/aub_mem_dump") message(STATUS "Aub Stream dir: ${AUB_STREAM_DIR}") endif() endif(NOT DEFINED AUB_STREAM_DIR) @@ -362,7 +362,7 @@ endif() add_subdirectory(third_party/gtest) if(DEFINED AUB_STREAM_DIR) - add_subdirectory(${AUB_STREAM_DIR}) + add_subdirectory(${AUB_STREAM_DIR} ${CMAKE_BINARY_DIR}/aub_stream) endif() add_definitions(-DGMM_OCL) diff --git a/runtime/aub/CMakeLists.txt b/runtime/aub/CMakeLists.txt index c1846ef153..bd1c4f30b6 100644 --- a/runtime/aub/CMakeLists.txt +++ b/runtime/aub/CMakeLists.txt @@ -6,6 +6,8 @@ set(RUNTIME_SRCS_AUB ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt + ${CMAKE_CURRENT_SOURCE_DIR}/aub_center.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/aub_center.h ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}/aub_helper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/aub_helper.h ${CMAKE_CURRENT_SOURCE_DIR}/aub_helper.inl diff --git a/runtime/aub/aub_center.cpp b/runtime/aub/aub_center.cpp new file mode 100644 index 0000000000..c8d78a82af --- /dev/null +++ b/runtime/aub/aub_center.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "runtime/aub/aub_center.h" +#include "runtime/helpers/hw_info.h" +#include "runtime/os_interface/debug_settings_manager.h" + +namespace OCLRT { +AubCenter::AubCenter(const HardwareInfo *pHwInfo, bool localMemoryEnabled) { + if (DebugManager.flags.UseAubStream.get()) { + std::string filename("aub.aub"); + aubManager.reset(AubDump::AubManager::create(pHwInfo->pPlatform->eRenderCoreFamily, 1, 1, localMemoryEnabled, filename)); + } + addressMapper = std::make_unique(); + streamProvider = std::make_unique(); +} +} // namespace OCLRT diff --git a/runtime/command_stream/aub_center.h b/runtime/aub/aub_center.h similarity index 74% rename from runtime/command_stream/aub_center.h rename to runtime/aub/aub_center.h index 1669b5dd37..6914b8c0d0 100644 --- a/runtime/command_stream/aub_center.h +++ b/runtime/aub/aub_center.h @@ -11,20 +11,13 @@ #include "runtime/memory_manager/physical_address_allocator.h" #include "third_party/aub_stream/headers/aub_manager.h" -#include "third_party/aub_stream/headers/aub_streamer.h" namespace OCLRT { +struct HardwareInfo; class AubCenter { public: - AubCenter() { - if (DebugManager.flags.UseAubStream.get()) { - std::string filename("aub.aub"); - aubManager = std::make_unique(1, false, filename); - } - addressMapper = std::make_unique(); - streamProvider = std::make_unique(); - } + AubCenter(const HardwareInfo *pHwInfo, bool localMemoryEnabled); virtual ~AubCenter() = default; void initPhysicalAddressAllocator(PhysicalAddressAllocator *pPhysicalAddressAllocator) { diff --git a/runtime/aub_mem_dump/aub_stream_stubs.cpp b/runtime/aub_mem_dump/aub_stream_stubs.cpp index 93c85b60dd..8eceb890a3 100644 --- a/runtime/aub_mem_dump/aub_stream_stubs.cpp +++ b/runtime/aub_mem_dump/aub_stream_stubs.cpp @@ -6,47 +6,11 @@ */ #include "third_party/aub_stream/headers/aub_manager.h" -#include "third_party/aub_stream/headers/aub_streamer.h" namespace AubDump { -struct AubFileStream {}; -struct PhysicalAddressAllocator {}; -struct GGTT {}; -struct PML4 {}; -struct PDP4 {}; - -AubManager::AubManager(uint32_t devicesCount, bool localMemorySupported, std::string &aubFileName) { -} - -void AubManager::initialize(uint32_t devicesCount, bool localMemorySupported) { -} - -AubManager::~AubManager() { -} - -AubStreamer *AubManager::createAubStreamer(uint32_t gfxFamily, uint32_t device, uint32_t engine) { +AubManager *AubManager::create(uint32_t gfxFamily, uint32_t devicesCount, size_t memoryBankSizeInGB, bool localMemorySupported, std::string &aubFileName) { return nullptr; } -AubStreamer::~AubStreamer() { -} - -void AubStreamer::writeMemory(uint64_t gfxAddress, const void *memory, size_t size, uint32_t memoryBanks, size_t pageSize) { -} - -void AubStreamer::expectMemory(uint64_t gfxAddress, const void *memory, size_t size) { -} - -void AubStreamer::dumpBuffer(uint64_t gfxAddress, size_t size) { -} -void AubStreamer::dumpImage(uint64_t gfxAddress, size_t size) { -} - -void AubStreamer::submit(uint64_t batchBufferGfxAddress, const void *batchBuffer, size_t size, uint32_t memoryBank) { -} - -void AubStreamer::pollForCompletion() { -} - } // namespace AubDump diff --git a/runtime/command_stream/CMakeLists.txt b/runtime/command_stream/CMakeLists.txt index 2df8982b0c..eb6640ffe8 100644 --- a/runtime/command_stream/CMakeLists.txt +++ b/runtime/command_stream/CMakeLists.txt @@ -6,7 +6,6 @@ set(RUNTIME_SRCS_COMMAND_STREAM ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt - ${CMAKE_CURRENT_SOURCE_DIR}/aub_center.h ${CMAKE_CURRENT_SOURCE_DIR}/aub_command_stream_receiver.cpp ${CMAKE_CURRENT_SOURCE_DIR}/aub_command_stream_receiver.h ${CMAKE_CURRENT_SOURCE_DIR}/aub_command_stream_receiver_hw.h diff --git a/runtime/command_stream/aub_command_stream_receiver_hw.h b/runtime/command_stream/aub_command_stream_receiver_hw.h index a2596ac33e..0d31b6385a 100644 --- a/runtime/command_stream/aub_command_stream_receiver_hw.h +++ b/runtime/command_stream/aub_command_stream_receiver_hw.h @@ -8,7 +8,7 @@ #pragma once #include "runtime/gen_common/aub_mapper.h" #include "command_stream_receiver_simulated_hw.h" -#include "runtime/command_stream/aub_center.h" +#include "runtime/aub/aub_center.h" #include "runtime/command_stream/aub_command_stream_receiver.h" #include "runtime/helpers/array_count.h" #include "runtime/memory_manager/address_mapper.h" diff --git a/runtime/command_stream/aub_command_stream_receiver_hw.inl b/runtime/command_stream/aub_command_stream_receiver_hw.inl index 714d5e2d61..c8e3a9a3fb 100644 --- a/runtime/command_stream/aub_command_stream_receiver_hw.inl +++ b/runtime/command_stream/aub_command_stream_receiver_hw.inl @@ -35,7 +35,7 @@ AUBCommandStreamReceiverHw::AUBCommandStreamReceiverHw(const Hardware subCaptureManager(std::make_unique(fileName)), standalone(standalone) { - executionEnvironment.initAubCenter(); + executionEnvironment.initAubCenter(&this->peekHwInfo(), this->localMemoryEnabled); auto aubCenter = executionEnvironment.aubCenter.get(); UNRECOVERABLE_IF(nullptr == aubCenter); diff --git a/runtime/execution_environment/execution_environment.cpp b/runtime/execution_environment/execution_environment.cpp index 2df9da85e8..561f82cfbf 100644 --- a/runtime/execution_environment/execution_environment.cpp +++ b/runtime/execution_environment/execution_environment.cpp @@ -5,8 +5,8 @@ * */ +#include "runtime/aub/aub_center.h" #include "runtime/execution_environment/execution_environment.h" -#include "runtime/command_stream/aub_center.h" #include "runtime/command_stream/command_stream_receiver.h" #include "runtime/compiler_interface/compiler_interface.h" #include "runtime/source_level_debugger/source_level_debugger.h" @@ -23,9 +23,9 @@ ExecutionEnvironment::ExecutionEnvironment() = default; ExecutionEnvironment::~ExecutionEnvironment() = default; extern CommandStreamReceiver *createCommandStream(const HardwareInfo *pHwInfo, ExecutionEnvironment &executionEnvironment); -void ExecutionEnvironment::initAubCenter() { +void ExecutionEnvironment::initAubCenter(const HardwareInfo *pHwInfo, bool localMemoryEnabled) { if (!aubCenter) { - aubCenter.reset(new AubCenter()); + aubCenter.reset(new AubCenter(pHwInfo, localMemoryEnabled)); } } void ExecutionEnvironment::initGmm(const HardwareInfo *hwInfo) { diff --git a/runtime/execution_environment/execution_environment.h b/runtime/execution_environment/execution_environment.h index bf7db866d8..2f5b939818 100644 --- a/runtime/execution_environment/execution_environment.h +++ b/runtime/execution_environment/execution_environment.h @@ -35,7 +35,7 @@ class ExecutionEnvironment : public ReferenceTrackedObject ExecutionEnvironment(); ~ExecutionEnvironment() override; - void initAubCenter(); + MOCKABLE_VIRTUAL void initAubCenter(const HardwareInfo *hwInfo, bool localMemoryEnabled); void initGmm(const HardwareInfo *hwInfo); bool initializeCommandStreamReceiver(const HardwareInfo *pHwInfo, uint32_t deviceIndex); void initializeMemoryManager(bool enable64KBpages, bool enableLocalMemory, uint32_t deviceIndex); diff --git a/runtime/platform/platform.cpp b/runtime/platform/platform.cpp index af6ee7baa1..f077b28f33 100644 --- a/runtime/platform/platform.cpp +++ b/runtime/platform/platform.cpp @@ -7,6 +7,7 @@ #include "platform.h" #include "runtime/api/api.h" +#include "runtime/command_stream/command_stream_receiver.h" #include "runtime/compiler_interface/compiler_interface.h" #include "CL/cl_ext.h" #include "runtime/device/device.h" @@ -165,6 +166,11 @@ bool Platform::initialize() { } } + CommandStreamReceiverType csrType = this->devices[0]->getCommandStreamReceiver().getType(); + if (csrType != CommandStreamReceiverType::CSR_HW) { + executionEnvironment->initAubCenter(&hwInfo[0], this->devices[0]->getEnableLocalMemory()); + } + this->fillGlobalDispatchTable(); state = StateInited; diff --git a/third_party/aub_stream/headers/aub_manager.h b/third_party/aub_stream/headers/aub_manager.h index fb9463c15e..205f4e38c5 100644 --- a/third_party/aub_stream/headers/aub_manager.h +++ b/third_party/aub_stream/headers/aub_manager.h @@ -6,57 +6,19 @@ */ #pragma once - -#include +#include #include -#include namespace AubDump { -class AubStreamer; -struct AubFileStream; -struct PhysicalAddressAllocator; -struct GGTT; -struct PML4; -struct PDP4; -using PPGTT = typename std::conditional::type; +struct HardwareContext; class AubManager { public: - AubManager(uint32_t devicesCount, bool localMemorySupported, std::string &aubFileName); - virtual ~AubManager(); + virtual ~AubManager() = default; + virtual HardwareContext *createHardwareContext(uint32_t device, uint32_t engine) = 0; - AubManager &operator=(const AubManager &) = delete; - AubManager(const AubManager &) = delete; - - GGTT *getGGTT(uint32_t index) { - return ggtts.at(index).get(); - } - - PPGTT *getPPGTT(uint32_t index) { - return ppgtts.at(index).get(); - } - - PhysicalAddressAllocator *getPysicalAddressAllocator() { - return physicalAddressAllocator.get(); - } - - AubFileStream *getAubFileStream() { - return aubFileStream.get(); - } - - AubStreamer *createAubStreamer(uint32_t gfxFamily, uint32_t device, uint32_t engine); - - protected: - void initialize(uint32_t devicesCount, bool localMemorySupported); - - uint32_t devicesCount = 0; - - std::unique_ptr aubFileStream; - std::unique_ptr physicalAddressAllocator; - - std::vector> ppgtts; - std::vector> ggtts; + static AubManager *create(uint32_t gfxFamily, uint32_t devicesCount, size_t memoryBankSizeInGB, bool localMemorySupported, std::string &aubFileName); }; } // namespace AubDump diff --git a/third_party/aub_stream/headers/aub_streamer.h b/third_party/aub_stream/headers/aub_streamer.h deleted file mode 100644 index b986230d3a..0000000000 --- a/third_party/aub_stream/headers/aub_streamer.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2018 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#pragma once -#include - -namespace AubDump { - -class AubStreamer { - public: - void writeMemory(uint64_t gfxAddress, const void *memory, size_t size, uint32_t memoryBanks, size_t pageSize); - void expectMemory(uint64_t gfxAddress, const void *memory, size_t size); - void dumpBuffer(uint64_t gfxAddress, size_t size); - void dumpImage(uint64_t gfxAddress, size_t size); - - void submit(uint64_t batchBufferGfxAddress, const void *batchBuffer, size_t size, uint32_t memoryBank); - void pollForCompletion(); - - class AubStreamerImpl; - AubStreamerImpl *aubStreamerImpl; - - ~AubStreamer(); -}; - -} // namespace AubDump diff --git a/third_party/aub_stream/headers/hardware_context.h b/third_party/aub_stream/headers/hardware_context.h new file mode 100644 index 0000000000..5aa0324960 --- /dev/null +++ b/third_party/aub_stream/headers/hardware_context.h @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once +#include + +namespace AubDump { + +struct HardwareContext { + virtual void initialize() = 0; + virtual void pollForCompletion() = 0; + virtual void submit(uint64_t gfxAddress, const void *batchBuffer, size_t size, uint32_t memoryBank) = 0; + virtual void writeMemory(uint64_t gfxAddress, const void *memory, size_t size, uint32_t memoryBanks, int hint, size_t pageSize = 4096) = 0; + virtual void freeMemory(uint64_t gfxAddress, size_t size) = 0; +}; + +} // namespace AubDump diff --git a/unit_tests/aub/CMakeLists.txt b/unit_tests/aub/CMakeLists.txt index 9a980c0189..0d78343805 100644 --- a/unit_tests/aub/CMakeLists.txt +++ b/unit_tests/aub/CMakeLists.txt @@ -9,5 +9,16 @@ set(IGDRCL_SRCS_aub_helper_tests ${CMAKE_CURRENT_SOURCE_DIR}/aub_center_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/aub_helper_tests.cpp ) + +if(NOT DEFINED AUB_STREAM_DIR) + list(APPEND IGDRCL_SRCS_aub_helper_tests + ${CMAKE_CURRENT_SOURCE_DIR}/aub_center_using_aubstream_stubs_tests.cpp + ) +else() + list(APPEND IGDRCL_SRCS_aub_helper_tests + ${CMAKE_CURRENT_SOURCE_DIR}/aub_center_using_aubstream_lib_tests.cpp + ) +endif() + target_sources(igdrcl_tests PRIVATE ${IGDRCL_SRCS_aub_helper_tests}) add_subdirectories() diff --git a/unit_tests/aub/aub_center_tests.cpp b/unit_tests/aub/aub_center_tests.cpp index fa936684a3..0f826e7d2d 100644 --- a/unit_tests/aub/aub_center_tests.cpp +++ b/unit_tests/aub/aub_center_tests.cpp @@ -5,24 +5,19 @@ * */ -#include "runtime/command_stream/aub_center.h" +#include "runtime/helpers/hw_info.h" +#include "runtime/helpers/options.h" #include "runtime/os_interface/debug_settings_manager.h" #include "unit_tests/helpers/debug_manager_state_restore.h" +#include "unit_tests/mocks/mock_aub_center.h" #include "gtest/gtest.h" using namespace OCLRT; -class MockAubCenter : public AubCenter { - public: - using AubCenter::AubCenter; - using AubCenter::aubManager; -}; - -TEST(AubCenter, GivenUseAubStreamDebugVarSetWhenAubCenterIsCreatedThenAubMangerIsInitialized) { +TEST(AubCenter, GivenUseAubStreamDebugVariableNotSetWhenAubCenterIsCreatedThenAubCenterDoesNotCreateAubManager) { DebugManagerStateRestore restorer; - DebugManager.flags.UseAubStream.set(true); + DebugManager.flags.UseAubStream.set(false); - MockAubCenter aubCenter; - - EXPECT_NE(nullptr, aubCenter.aubManager.get()); + MockAubCenter aubCenter(platformDevices[0], false); + EXPECT_EQ(nullptr, aubCenter.aubManager.get()); } diff --git a/unit_tests/aub/aub_center_using_aubstream_lib_tests.cpp b/unit_tests/aub/aub_center_using_aubstream_lib_tests.cpp new file mode 100644 index 0000000000..fd850abb3d --- /dev/null +++ b/unit_tests/aub/aub_center_using_aubstream_lib_tests.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "runtime/helpers/hw_info.h" +#include "runtime/helpers/options.h" +#include "runtime/os_interface/debug_settings_manager.h" +#include "unit_tests/helpers/debug_manager_state_restore.h" +#include "unit_tests/mocks/mock_aub_center.h" + +#include "gtest/gtest.h" +using namespace OCLRT; + +TEST(AubCenter, GivenUseAubStreamDebugVariableSetWhenAubCenterIsCreatedThenAubCenterCreatesAubManager) { + DebugManagerStateRestore restorer; + DebugManager.flags.UseAubStream.set(true); + + MockAubCenter aubCenter(platformDevices[0], false); + + EXPECT_NE(nullptr, aubCenter.aubManager.get()); +} diff --git a/unit_tests/aub/aub_center_using_aubstream_stubs_tests.cpp b/unit_tests/aub/aub_center_using_aubstream_stubs_tests.cpp new file mode 100644 index 0000000000..229d3cfa32 --- /dev/null +++ b/unit_tests/aub/aub_center_using_aubstream_stubs_tests.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "runtime/helpers/hw_info.h" +#include "runtime/helpers/options.h" +#include "runtime/os_interface/debug_settings_manager.h" +#include "unit_tests/helpers/debug_manager_state_restore.h" +#include "unit_tests/mocks/mock_aub_center.h" + +#include "gtest/gtest.h" +using namespace OCLRT; + +TEST(AubCenter, GivenUseAubStreamDebugVariableSetWhenAubCenterIsCreatedThenAubManagerIsNotCreated) { + DebugManagerStateRestore restorer; + DebugManager.flags.UseAubStream.set(true); + + MockAubCenter aubCenter(platformDevices[0], false); + + EXPECT_EQ(nullptr, aubCenter.aubManager.get()); +} diff --git a/unit_tests/execution_environment/execution_environment_tests.cpp b/unit_tests/execution_environment/execution_environment_tests.cpp index 6e9eb80777..6b3357251e 100644 --- a/unit_tests/execution_environment/execution_environment_tests.cpp +++ b/unit_tests/execution_environment/execution_environment_tests.cpp @@ -5,8 +5,8 @@ * */ +#include "runtime/aub/aub_center.h" #include "runtime/built_ins/built_ins.h" -#include "runtime/command_stream/aub_center.h" #include "runtime/compiler_interface/compiler_interface.h" #include "runtime/device/device.h" #include "runtime/execution_environment/execution_environment.h" @@ -125,14 +125,14 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeIsCalledMultip TEST(ExecutionEnvironment, givenExecutionEnvironmentWhenInitializeAubCenterIsCalledThenItIsInitalizedOnce) { ExecutionEnvironment executionEnvironment; - executionEnvironment.initAubCenter(); + executionEnvironment.initAubCenter(platformDevices[0], false); auto currentAubCenter = executionEnvironment.aubCenter.get(); EXPECT_NE(nullptr, currentAubCenter); auto currentAubStreamProvider = currentAubCenter->getStreamProvider(); EXPECT_NE(nullptr, currentAubStreamProvider); auto currentAubFileStream = currentAubStreamProvider->getStream(); EXPECT_NE(nullptr, currentAubFileStream); - executionEnvironment.initAubCenter(); + executionEnvironment.initAubCenter(platformDevices[0], false); EXPECT_EQ(currentAubCenter, executionEnvironment.aubCenter.get()); EXPECT_EQ(currentAubStreamProvider, executionEnvironment.aubCenter->getStreamProvider()); EXPECT_EQ(currentAubFileStream, executionEnvironment.aubCenter->getStreamProvider()->getStream()); @@ -170,7 +170,7 @@ TEST(ExecutionEnvironment, givenExecutionEnvironmentWithVariousMembersWhenItIsDe MemoryMangerMock(uint32_t &destructorId) : DestructorCounted(destructorId) {} }; struct AubCenterMock : public DestructorCounted { - AubCenterMock(uint32_t &destructorId) : DestructorCounted(destructorId) {} + AubCenterMock(uint32_t &destructorId) : DestructorCounted(destructorId, platformDevices[0], false) {} }; struct CommandStreamReceiverMock : public DestructorCounted { CommandStreamReceiverMock(uint32_t &destructorId, ExecutionEnvironment &executionEnvironment) : DestructorCounted(destructorId, executionEnvironment) {} diff --git a/unit_tests/mocks/CMakeLists.txt b/unit_tests/mocks/CMakeLists.txt index 8644228d2d..a548ecb5c0 100644 --- a/unit_tests/mocks/CMakeLists.txt +++ b/unit_tests/mocks/CMakeLists.txt @@ -9,6 +9,7 @@ set(IGDRCL_SRCS_tests_mocks ${CMAKE_CURRENT_SOURCE_DIR}/mock_32bitAllocator.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_async_event_handler.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mock_async_event_handler.h + ${CMAKE_CURRENT_SOURCE_DIR}/mock_aub_center.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_aub_csr.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_aub_file_stream.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_aub_stream.h @@ -33,6 +34,7 @@ set(IGDRCL_SRCS_tests_mocks ${CMAKE_CURRENT_SOURCE_DIR}/mock_device.cpp ${CMAKE_CURRENT_SOURCE_DIR}/mock_device.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_event.h + ${CMAKE_CURRENT_SOURCE_DIR}/mock_execution_environment.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_experimental_command_buffer.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_gmm.h ${CMAKE_CURRENT_SOURCE_DIR}/mock_gmm_client_context_base.cpp diff --git a/unit_tests/mocks/mock_aub_center.h b/unit_tests/mocks/mock_aub_center.h new file mode 100644 index 0000000000..9c84f1e54c --- /dev/null +++ b/unit_tests/mocks/mock_aub_center.h @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "runtime/aub/aub_center.h" + +class MockAubCenter : public OCLRT::AubCenter { + public: + using AubCenter::AubCenter; + using AubCenter::aubManager; + ~MockAubCenter() override = default; +}; diff --git a/unit_tests/mocks/mock_execution_environment.h b/unit_tests/mocks/mock_execution_environment.h new file mode 100644 index 0000000000..25ee0082c5 --- /dev/null +++ b/unit_tests/mocks/mock_execution_environment.h @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2018 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#pragma once + +#include "runtime/execution_environment/execution_environment.h" +namespace OCLRT { +struct MockExecutionEnvironment : ExecutionEnvironment { + MockExecutionEnvironment() = default; + void initAubCenter(const HardwareInfo *hwInfo, bool localMemoryEnabled) override { + initAubCenterCalled = true; + ExecutionEnvironment::initAubCenter(hwInfo, localMemoryEnabled); + } + bool initAubCenterCalled = false; +}; +} // namespace OCLRT diff --git a/unit_tests/platform/platform_tests.cpp b/unit_tests/platform/platform_tests.cpp index 6b27904a5a..028d717f3d 100644 --- a/unit_tests/platform/platform_tests.cpp +++ b/unit_tests/platform/platform_tests.cpp @@ -13,6 +13,7 @@ #include "unit_tests/fixtures/platform_fixture.h" #include "unit_tests/mocks/mock_async_event_handler.h" #include "unit_tests/mocks/mock_csr.h" +#include "unit_tests/mocks/mock_execution_environment.h" #include "unit_tests/libult/create_command_stream.h" #include "gtest/gtest.h" #include "gmock/gmock.h" @@ -25,6 +26,17 @@ struct PlatformTest : public ::testing::Test { std::unique_ptr pPlatform; }; +struct MockPlatformWithMockExecutionEnvironment : public Platform { + MockExecutionEnvironment *mockExecutionEnvironment = nullptr; + + MockPlatformWithMockExecutionEnvironment() { + this->executionEnvironment->decRefInternal(); + mockExecutionEnvironment = new MockExecutionEnvironment; + executionEnvironment = mockExecutionEnvironment; + executionEnvironment->incRefInternal(); + } +}; + TEST_F(PlatformTest, getDevices) { size_t devNum = pPlatform->getNumDevices(); EXPECT_EQ(0u, devNum); @@ -67,6 +79,25 @@ TEST_F(PlatformTest, hasAsyncEventsHandler) { EXPECT_NE(nullptr, pPlatform->getAsyncEventsHandler()); } +TEST(PlatformTestSimple, givenCsrHwTypeWhenPlatformIsInitializedThenInitAubCenterIsNotCalled) { + DebugManagerStateRestore stateRestore; + DebugManager.flags.SetCommandStreamReceiver.set(0); + MockPlatformWithMockExecutionEnvironment platform; + bool ret = platform.initialize(); + EXPECT_TRUE(ret); + EXPECT_FALSE(platform.mockExecutionEnvironment->initAubCenterCalled); +} + +TEST(PlatformTestSimple, givenNotCsrHwTypeWhenPlatformIsInitializedThenInitAubCenterIsCalled) { + DebugManagerStateRestore stateRestore; + DebugManager.flags.SetCommandStreamReceiver.set(1); + overrideCommandStreamReceiverCreation = true; + MockPlatformWithMockExecutionEnvironment platform; + bool ret = platform.initialize(); + EXPECT_TRUE(ret); + EXPECT_TRUE(platform.mockExecutionEnvironment->initAubCenterCalled); +} + TEST(PlatformTestSimple, shutdownClosesAsyncEventHandlerThread) { Platform *platform = new Platform;