summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/cmd_parser.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/service/cmd_parser.cc')
-rw-r--r--gpu/command_buffer/service/cmd_parser.cc110
1 files changed, 0 insertions, 110 deletions
diff --git a/gpu/command_buffer/service/cmd_parser.cc b/gpu/command_buffer/service/cmd_parser.cc
deleted file mode 100644
index 019e7b2..0000000
--- a/gpu/command_buffer/service/cmd_parser.cc
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright 2009, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-// This file contains the implementation of the command parser.
-
-#include "gpu/command_buffer/service/precompile.h"
-#include "gpu/command_buffer/service/cmd_parser.h"
-
-namespace command_buffer {
-
-CommandParser::CommandParser(void *shm_address,
- size_t shm_size,
- ptrdiff_t offset,
- size_t size,
- CommandBufferOffset start_get,
- AsyncAPIInterface *handler)
- : get_(start_get),
- put_(start_get),
- handler_(handler) {
- // check proper alignments.
- DCHECK_EQ(0, (reinterpret_cast<intptr_t>(shm_address)) % 4);
- DCHECK_EQ(0, offset % 4);
- DCHECK_EQ(0u, size % 4);
- // check that the command buffer fits into the memory buffer.
- DCHECK_GE(shm_size, offset + size);
- char * buffer_begin = static_cast<char *>(shm_address) + offset;
- buffer_ = reinterpret_cast<CommandBufferEntry *>(buffer_begin);
- entry_count_ = size / 4;
-}
-
-// Process one command, reading the header from the command buffer, and
-// forwarding the command index and the arguments to the handler.
-// Note that:
-// - validation needs to happen on a copy of the data (to avoid race
-// conditions). This function only validates the header, leaving the arguments
-// validation to the handler, so it can pass a reference to them.
-// - get_ is modified *after* the command has been executed.
-parse_error::ParseError CommandParser::ProcessCommand() {
- CommandBufferOffset get = get_;
- if (get == put_) return parse_error::kParseNoError;
-
- CommandHeader header = buffer_[get].value_header;
- if (header.size == 0) {
- DLOG(INFO) << "Error: zero sized command in command buffer";
- return parse_error::kParseInvalidSize;
- }
-
- if (header.size + get > entry_count_) {
- DLOG(INFO) << "Error: get offset out of bounds";
- return parse_error::kParseOutOfBounds;
- }
-
- parse_error::ParseError result = handler_->DoCommand(
- header.command, header.size - 1, buffer_ + get);
- // TODO(gman): If you want to log errors this is the best place to catch them.
- // It seems like we need an official way to turn on a debug mode and
- // get these errors.
- if (result != parse_error::kParseNoError) {
- ReportError(header.command, result);
- }
- get_ = (get + header.size) % entry_count_;
- return result;
-}
-
-void CommandParser::ReportError(unsigned int command_id,
- parse_error::ParseError result) {
- DLOG(INFO) << "Error: " << result << " for Command "
- << handler_->GetCommandName(command_id);
-}
-
-// Processes all the commands, while the buffer is not empty. Stop if an error
-// is encountered.
-parse_error::ParseError CommandParser::ProcessAllCommands() {
- while (!IsEmpty()) {
- parse_error::ParseError error = ProcessCommand();
- if (error) return error;
- }
- return parse_error::kParseNoError;
-}
-
-} // namespace command_buffer