1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "gpu/command_buffer/common/mailbox.h" 6 7#include <string.h> 8 9#include "base/logging.h" 10#include "base/rand_util.h" 11 12namespace gpu { 13 14Mailbox::Mailbox() { 15 memset(name, 0, sizeof(name)); 16} 17 18bool Mailbox::IsZero() const { 19 for (size_t i = 0; i < arraysize(name); ++i) { 20 if (name[i]) 21 return false; 22 } 23 return true; 24} 25 26void Mailbox::SetZero() { 27 memset(name, 0, sizeof(name)); 28} 29 30void Mailbox::SetName(const int8* n) { 31 DCHECK(IsZero() || !memcmp(name, n, sizeof(name))); 32 memcpy(name, n, sizeof(name)); 33} 34 35Mailbox Mailbox::Generate() { 36 Mailbox result; 37 // Generates cryptographically-secure bytes. 38 base::RandBytes(result.name, sizeof(result.name)); 39#if !defined(NDEBUG) 40 int8 value = 1; 41 for (size_t i = 1; i < sizeof(result.name); ++i) 42 value ^= result.name[i]; 43 result.name[0] = value; 44#endif 45 return result; 46} 47 48bool Mailbox::Verify() const { 49#if !defined(NDEBUG) 50 int8 value = 1; 51 for (size_t i = 0; i < sizeof(name); ++i) 52 value ^= name[i]; 53 return value == 0; 54#else 55 return true; 56#endif 57} 58 59} // namespace gpu 60