// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "cc/quads/largest_draw_quad.h"

#include <algorithm>

#include "cc/quads/checkerboard_draw_quad.h"
#include "cc/quads/debug_border_draw_quad.h"
#include "cc/quads/io_surface_draw_quad.h"
#include "cc/quads/picture_draw_quad.h"
#include "cc/quads/render_pass_draw_quad.h"
#include "cc/quads/solid_color_draw_quad.h"
#include "cc/quads/stream_video_draw_quad.h"
#include "cc/quads/surface_draw_quad.h"
#include "cc/quads/texture_draw_quad.h"
#include "cc/quads/tile_draw_quad.h"
#include "cc/quads/yuv_video_draw_quad.h"

namespace {
const size_t kLargestDrawQuadSize =
    sizeof(cc::RenderPassDrawQuad) > sizeof(cc::StreamVideoDrawQuad)
        ? sizeof(cc::RenderPassDrawQuad)
        : sizeof(cc::StreamVideoDrawQuad);
}  // namespace

namespace cc {

size_t LargestDrawQuadSize() {
  // Currently the largest quad is either a RenderPassDrawQuad or a
  // StreamVideoDrawQuad depends on hardware structure.

  // Use compile assert to make sure largest is actually larger than all other
  // type of draw quads.
  COMPILE_ASSERT(sizeof(CheckerboardDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. CheckerboardDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(DebugBorderDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. DebugBorderDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(IOSurfaceDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. IOSurfaceDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(PictureDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. PictureDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(TextureDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. TextureDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(SolidColorDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. SolidColorDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(SurfaceDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. SurfaceDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(TileDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. TileDrawQuad is "
                 "currently largest.");
  COMPILE_ASSERT(sizeof(YUVVideoDrawQuad) <= kLargestDrawQuadSize,
                 "Largest Draw Quad size needs update. YUVVideoDrawQuad is "
                 "currently largest.");

  return kLargestDrawQuadSize;
}

}  // namespace cc
