This reduces non-unity build time by ~2% and build size by ~0.5%.

This PR is a 'clean' version of #6199 updated to latest development

Signed-off-by: nemerle <96597+nemerle@users.noreply.github.com>
This commit is contained in:
nemerle
2021-12-12 23:48:47 +01:00
parent 4670003aaf
commit 5ff65be314
87 changed files with 882 additions and 604 deletions
@@ -100,7 +100,7 @@ namespace AZ::IO
void QueueReadRequest(FileRequest* request)
{
auto data = AZStd::get_if<FileRequest::ReadData>(&request->GetCommand());
auto data = AZStd::get_if<Requests::ReadData>(&request->GetCommand());
if (data)
{
if (m_fakeFileFound)
@@ -122,15 +122,15 @@ namespace AZ::IO
m_context->MarkRequestAsCompleted(request);
}
else if (
AZStd::holds_alternative<FileRequest::FlushData>(request->GetCommand()) ||
AZStd::holds_alternative<FileRequest::FlushAllData>(request->GetCommand()))
AZStd::holds_alternative<Requests::FlushData>(request->GetCommand()) ||
AZStd::holds_alternative<Requests::FlushAllData>(request->GetCommand()))
{
request->SetStatus(IStreamerTypes::RequestStatus::Completed);
m_context->MarkRequestAsCompleted(request);
}
else if (AZStd::holds_alternative<FileRequest::FileMetaDataRetrievalData>(request->GetCommand()))
else if (AZStd::holds_alternative<Requests::FileMetaDataRetrievalData>(request->GetCommand()))
{
auto& data2 = AZStd::get<FileRequest::FileMetaDataRetrievalData>(request->GetCommand());
auto& data2 = AZStd::get<Requests::FileMetaDataRetrievalData>(request->GetCommand());
data2.m_found = m_fakeFileFound;
data2.m_fileSize = m_fakeFileLength;
request->SetStatus(m_fakeFileFound ? IStreamerTypes::RequestStatus::Completed : IStreamerTypes::RequestStatus::Failed);
@@ -158,16 +158,16 @@ namespace AZ::IO
void QueueCanceledReadRequest(FileRequest* request)
{
auto data = AZStd::get_if<FileRequest::ReadData>(&request->GetCommand());
auto data = AZStd::get_if<Requests::ReadData>(&request->GetCommand());
if (data)
{
ReadFile(data->m_output, data->m_path, data->m_offset, data->m_size);
request->SetStatus(IStreamerTypes::RequestStatus::Canceled);
m_context->MarkRequestAsCompleted(request);
}
else if (AZStd::holds_alternative<FileRequest::FileMetaDataRetrievalData>(request->GetCommand()))
else if (AZStd::holds_alternative<Requests::FileMetaDataRetrievalData>(request->GetCommand()))
{
auto& data2 = AZStd::get<FileRequest::FileMetaDataRetrievalData>(request->GetCommand());
auto& data2 = AZStd::get<Requests::FileMetaDataRetrievalData>(request->GetCommand());
data2.m_found = true;
data2.m_fileSize = m_fakeFileLength;
request->SetStatus(IStreamerTypes::RequestStatus::Completed);
@@ -145,7 +145,7 @@ namespace AZ::IO
void PrepareReadRequest(FileRequest* request)
{
auto data = AZStd::get_if<FileRequest::ReadData>(&request->GetCommand());
auto data = AZStd::get_if<Requests::ReadData>(&request->GetCommand());
ASSERT_NE(nullptr, data);
u64 size = data->m_size >> 2;
@@ -9,6 +9,7 @@
#include <gmock/gmock.h>
#include <AzCore/IO/IStreamer.h>
#include <AzCore/IO/Streamer/FileRequest.h>
using namespace AZ::IO;
@@ -155,7 +155,7 @@ namespace AZ::IO
{
EXPECT_EQ(subRequests[i]->GetParent(), readRequest);
FileRequest::ReadData* data = AZStd::get_if<FileRequest::ReadData>(&subRequests[i]->GetCommand());
Requests::ReadData* data = AZStd::get_if<Requests::ReadData>(&subRequests[i]->GetCommand());
ASSERT_NE(nullptr, data);
EXPECT_EQ(SplitSize, data->m_size);
EXPECT_EQ(SplitSize * i, data->m_offset);
@@ -210,7 +210,7 @@ namespace AZ::IO
{
EXPECT_EQ(subRequests[i]->GetParent(), readRequest);
FileRequest::ReadData* data = AZStd::get_if<FileRequest::ReadData>(&subRequests[i]->GetCommand());
Requests::ReadData* data = AZStd::get_if<Requests::ReadData>(&subRequests[i]->GetCommand());
ASSERT_NE(nullptr, data);
EXPECT_EQ(SplitSize, data->m_size);
EXPECT_EQ(SplitSize * i, data->m_offset);
@@ -230,7 +230,7 @@ namespace AZ::IO
{
EXPECT_EQ(subRequests[i]->GetParent(), readRequest);
FileRequest::ReadData* data = AZStd::get_if<FileRequest::ReadData>(&subRequests[i]->GetCommand());
Requests::ReadData* data = AZStd::get_if<Requests::ReadData>(&subRequests[i]->GetCommand());
ASSERT_NE(nullptr, data);
EXPECT_EQ(SplitSize, data->m_size);
EXPECT_EQ(SplitSize * (batchSize + i), data->m_offset);
@@ -265,7 +265,7 @@ namespace AZ::IO
m_readSplitter->QueueRequest(readRequest);
ASSERT_NE(nullptr, subRequest);
FileRequest::ReadData* data = AZStd::get_if<FileRequest::ReadData>(&subRequest->GetCommand());
Requests::ReadData* data = AZStd::get_if<Requests::ReadData>(&subRequest->GetCommand());
EXPECT_NE(buffer, data->m_output);
EXPECT_EQ(readSize, data->m_size);
EXPECT_EQ(0, data->m_offset);
@@ -311,7 +311,7 @@ namespace AZ::IO
m_readSplitter->QueueRequest(readRequest);
ASSERT_NE(nullptr, subRequest);
FileRequest::ReadData* data = AZStd::get_if<FileRequest::ReadData>(&subRequest->GetCommand());
Requests::ReadData* data = AZStd::get_if<Requests::ReadData>(&subRequest->GetCommand());
EXPECT_NE(buffer, data->m_output);
EXPECT_EQ(readSize + offsetAdjustment, data->m_size);
EXPECT_EQ(0, data->m_offset);
@@ -9,6 +9,7 @@
#include <AzCore/Casting/lossy_cast.h>
#include <AzCore/IO/Streamer/Streamer.h>
#include <AzCore/IO/Streamer/Scheduler.h>
#include <AzCore/IO/Streamer/FileRequest.h>
#include <AzCore/std/parallel/atomic.h>
#include <AzCore/std/parallel/binary_semaphore.h>
#include <AzCore/std/smart_ptr/make_shared.h>
@@ -86,7 +87,7 @@ namespace AZ::IO
.WillOnce([this](FileRequest* request)
{
AZ_Assert(m_streamerContext, "AZ::IO::Streamer is not ready to process requests.");
auto readData = AZStd::get_if<FileRequest::ReadRequestData>(&request->GetCommand());
auto readData = AZStd::get_if<Requests::ReadRequestData>(&request->GetCommand());
AZ_Assert(readData, "Test didn't pass in the correct request.");
FileRequest* read = m_streamerContext->GetNewInternalRequest();
read->CreateRead(request, readData->m_output, readData->m_outputSize, readData->m_path,
@@ -99,7 +100,7 @@ namespace AZ::IO
.WillOnce([this](FileRequest* request)
{
AZ_Assert(m_streamerContext, "AZ::IO::Streamer is not ready to process requests.");
auto readData = AZStd::get_if<FileRequest::ReadData>(&request->GetCommand());
auto readData = AZStd::get_if<Requests::ReadData>(&request->GetCommand());
AZ_Assert(readData, "Test didn't pass in the correct request.");
auto output = reinterpret_cast<uint8_t*>(readData->m_output);
AZ_Assert(output != nullptr, "Output buffer has not been set.");
@@ -304,7 +305,7 @@ namespace AZ::IO
EXPECT_CALL(*m_mock, QueueRequest(_)).Times(1)
.WillOnce(Invoke([this](FileRequest* request)
{
auto* read = request->GetCommandFromChain<FileRequest::ReadRequestData>();
auto* read = request->GetCommandFromChain<Requests::ReadRequestData>();
ASSERT_NE(nullptr, read);
EXPECT_LT(read->m_deadline, FileRequest::s_noDeadlineTime);
EXPECT_EQ(read->m_priority, IStreamerTypes::s_priorityHighest);
@@ -10,6 +10,7 @@
#include <limits>
#include <AzCore/IO/IStreamerTypes.h>
#include <AzCore/IO/Streamer/FileRequest.h>
#include <AzCore/IO/Streamer/StreamerContext.h>
#include <AzCore/IO/Streamer/StreamStackEntry.h>
#include <AzCore/std/smart_ptr/unique_ptr.h>