Assert HandleCommands succeeds

This commit is contained in:
Kai Ninomiya 2018-06-20 18:54:18 -07:00 committed by Kai Ninomiya
parent d5c1ecaf64
commit 21006bbe6f
8 changed files with 21 additions and 14 deletions

View File

@ -14,6 +14,7 @@
#include "SampleUtils.h" #include "SampleUtils.h"
#include "common/Assert.h"
#include "common/Platform.h" #include "common/Platform.h"
#include "utils/BackendBinding.h" #include "utils/BackendBinding.h"
#include "wire/TerribleCommandBuffer.h" #include "wire/TerribleCommandBuffer.h"
@ -212,8 +213,8 @@ bool InitSample(int argc, const char** argv) {
void DoFlush() { void DoFlush() {
if (cmdBufType == CmdBufType::Terrible) { if (cmdBufType == CmdBufType::Terrible) {
c2sBuf->Flush(); ASSERT(c2sBuf->Flush());
s2cBuf->Flush(); ASSERT(s2cBuf->Flush());
} }
glfwPollEvents(); glfwPollEvents();
} }

View File

@ -437,7 +437,7 @@ namespace nxt { namespace wire {
} }
const char* HandleCommands(const char* commands, size_t size) override { const char* HandleCommands(const char* commands, size_t size) override {
while (size > sizeof(ReturnWireCmd)) { while (size >= sizeof(ReturnWireCmd)) {
ReturnWireCmd cmdId = *reinterpret_cast<const ReturnWireCmd*>(commands); ReturnWireCmd cmdId = *reinterpret_cast<const ReturnWireCmd*>(commands);
bool success = false; bool success = false;

View File

@ -304,7 +304,7 @@ namespace nxt { namespace wire {
const char* HandleCommands(const char* commands, size_t size) override { const char* HandleCommands(const char* commands, size_t size) override {
mProcs.deviceTick(mKnownDevice.Get(1)->handle); mProcs.deviceTick(mKnownDevice.Get(1)->handle);
while (size > sizeof(WireCmd)) { while (size >= sizeof(WireCmd)) {
WireCmd cmdId = *reinterpret_cast<const WireCmd*>(commands); WireCmd cmdId = *reinterpret_cast<const WireCmd*>(commands);
bool success = false; bool success = false;

View File

@ -282,8 +282,8 @@ void NXTTest::SwapBuffersForCapture() {
void NXTTest::FlushWire() { void NXTTest::FlushWire() {
if (gTestUsesWire) { if (gTestUsesWire) {
mC2sBuf->Flush(); ASSERT(mC2sBuf->Flush());
mS2cBuf->Flush(); ASSERT(mS2cBuf->Flush());
} }
} }

View File

@ -15,6 +15,7 @@
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "mock/mock_nxt.h" #include "mock/mock_nxt.h"
#include "common/Assert.h"
#include "wire/TerribleCommandBuffer.h" #include "wire/TerribleCommandBuffer.h"
#include "wire/Wire.h" #include "wire/Wire.h"
@ -164,11 +165,11 @@ class WireTestsBase : public Test {
} }
void FlushClient() { void FlushClient() {
mC2sBuf->Flush(); ASSERT_TRUE(mC2sBuf->Flush());
} }
void FlushServer() { void FlushServer() {
mS2cBuf->Flush(); ASSERT_TRUE(mS2cBuf->Flush());
} }
MockProcTable api; MockProcTable api;
@ -807,7 +808,7 @@ TEST_F(WireBufferMappingTests, DestroyBeforeReadRequestEnd) {
TEST_F(WireBufferMappingTests, UnmapCalledTooEarlyForRead) { TEST_F(WireBufferMappingTests, UnmapCalledTooEarlyForRead) {
nxtCallbackUserdata userdata = 8657; nxtCallbackUserdata userdata = 8657;
nxtBufferMapReadAsync(buffer, 40, sizeof(uint32_t), ToMockBufferMapReadCallback, userdata); nxtBufferMapReadAsync(buffer, 40, sizeof(uint32_t), ToMockBufferMapReadCallback, userdata);
uint32_t bufferContent = 31337; uint32_t bufferContent = 31337;
EXPECT_CALL(api, OnBufferMapReadAsyncCallback(apiBuffer, 40, sizeof(uint32_t), _, _)) EXPECT_CALL(api, OnBufferMapReadAsyncCallback(apiBuffer, 40, sizeof(uint32_t), _, _))
.WillOnce(InvokeWithoutArgs([&]() { .WillOnce(InvokeWithoutArgs([&]() {

View File

@ -14,6 +14,8 @@
#include "wire/TerribleCommandBuffer.h" #include "wire/TerribleCommandBuffer.h"
#include "common/Assert.h"
namespace nxt { namespace wire { namespace nxt { namespace wire {
TerribleCommandBuffer::TerribleCommandBuffer() { TerribleCommandBuffer::TerribleCommandBuffer() {
@ -39,16 +41,19 @@ namespace nxt { namespace wire {
mOffset += size; mOffset += size;
if (mOffset > sizeof(mBuffer)) { if (mOffset > sizeof(mBuffer)) {
Flush(); if (!Flush()) {
return nullptr;
}
return GetCmdSpace(size); return GetCmdSpace(size);
} }
return result; return result;
} }
void TerribleCommandBuffer::Flush() { bool TerribleCommandBuffer::Flush() {
mHandler->HandleCommands(mBuffer, mOffset); bool success = mHandler->HandleCommands(mBuffer, mOffset) != nullptr;
mOffset = 0; mOffset = 0;
return success;
} }
}} // namespace nxt::wire }} // namespace nxt::wire

View File

@ -29,7 +29,7 @@ namespace nxt { namespace wire {
void SetHandler(CommandHandler* handler); void SetHandler(CommandHandler* handler);
void* GetCmdSpace(size_t size) override; void* GetCmdSpace(size_t size) override;
void Flush() override; bool Flush() override;
private: private:
CommandHandler* mHandler = nullptr; CommandHandler* mHandler = nullptr;

View File

@ -25,7 +25,7 @@ namespace nxt { namespace wire {
public: public:
virtual ~CommandSerializer() = default; virtual ~CommandSerializer() = default;
virtual void* GetCmdSpace(size_t size) = 0; virtual void* GetCmdSpace(size_t size) = 0;
virtual void Flush() = 0; virtual bool Flush() = 0;
}; };
class CommandHandler { class CommandHandler {