15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_COMMON_GPU_GPU_COMMAND_BUFFER_STUB_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_COMMON_GPU_GPU_COMMAND_BUFFER_STUB_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <deque> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/memory/scoped_vector.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/weak_ptr.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/observer_list.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/gpu/gpu_memory_allocation.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/gpu/gpu_memory_manager.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/common/gpu/gpu_memory_manager_client.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/common/constants.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/command_buffer_service.h" 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/context_group.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "gpu/command_buffer/service/gpu_scheduler.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_listener.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_sender.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "media/base/video_decoder_config.h" 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "ui/base/latency_info.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/native_widget_types.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gfx/size.h" 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gl_surface.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/gl/gpu_preference.h" 317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "url/gurl.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gpu { 34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)struct Mailbox; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace gles2 { 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ImageManager; 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class MailboxManager; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuChannel; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuVideoDecodeAccelerator; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuWatchdog; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GpuCommandBufferStub 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public GpuMemoryManagerClient, 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public IPC::Listener, 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public IPC::Sender, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::SupportsWeakPtr<GpuCommandBufferStub> { 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class DestructionObserver { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Called in Destroy(), before the context/surface are released. 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnWillDestroyStub() = 0; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~DestructionObserver() {} 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) typedef base::Callback<void(const ui::LatencyInfo&)> 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LatencyInfoCallback; 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuCommandBufferStub( 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuChannel* channel, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuCommandBufferStub* share_group, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::GLSurfaceHandle& handle, 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu::gles2::MailboxManager* mailbox_manager, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu::gles2::ImageManager* image_manager, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gfx::Size& size, 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const gpu::gles2::DisallowedFeatures& disallowed_features, 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& allowed_extensions, 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<int32>& attribs, 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GpuPreference gpu_preference, 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool use_virtualized_gl_context, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 route_id, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 surface_id, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuWatchdog* watchdog, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool software, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& active_url); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~GpuCommandBufferStub(); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Listener implementation: 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Sender implementation: 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Send(IPC::Message* msg) OVERRIDE; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GpuMemoryManagerClient implementation: 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gfx::Size GetSurfaceSize() const OVERRIDE; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual gpu::gles2::MemoryTracker* GetMemoryTracker() const OVERRIDE; 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetMemoryAllocation( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GpuMemoryAllocation& allocation) OVERRIDE; 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool GetTotalGpuMemory(uint64* bytes) OVERRIDE; 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this command buffer can currently handle IPC messages. 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool IsScheduled(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // If the command buffer is pre-empted and cannot process commands. 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool IsPreempted() const { 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scheduler_.get() && scheduler_->IsPreempted(); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether there are commands in the buffer that haven't been processed. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasUnprocessedCommands(); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu::gles2::GLES2Decoder* decoder() const { return decoder_.get(); } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu::GpuScheduler* scheduler() const { return scheduler_.get(); } 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuChannel* channel() const { return channel_; } 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Identifies the target surface. 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int32 surface_id() const { return surface_id_; } 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Identifies the various GpuCommandBufferStubs in the GPU process belonging 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to the same renderer process. 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 route_id() const { return route_id_; } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GpuPreference gpu_preference() { return gpu_preference_; } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Sends a message to the console. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SendConsoleMessage(int32 id, const std::string& message); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SendCachedShader(const std::string& key, const std::string& shader); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 127868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) gfx::GLSurface* surface() const { return surface_.get(); } 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddDestructionObserver(DestructionObserver* observer); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveDestructionObserver(DestructionObserver* observer); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Associates a sync point to this stub. When the stub is destroyed, it will 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // retire all sync points that haven't been previously retired. 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void AddSyncPoint(uint32 sync_point); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetPreemptByFlag(scoped_refptr<gpu::PreemptionFlag> flag); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 138c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetLatencyInfoCallback(const LatencyInfoCallback& callback); 139c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void MarkContextLost(); 1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuMemoryManager* GetMemoryManager(); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool MakeCurrent(); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Destroy(); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Cleans up and sends reply if OnInitialize failed. 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnInitializeFailed(IPC::Message* reply_message); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers: 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnInitialize(base::SharedMemoryHandle shared_state_shm, 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IPC::Message* reply_message); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetGetBuffer(int32 shm_id, IPC::Message* reply_message); 154868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void OnProduceFrontBuffer(const gpu::Mailbox& mailbox); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetState(IPC::Message* reply_message); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetStateFast(IPC::Message* reply_message); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnAsyncFlush(int32 put_offset, uint32 flush_count); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnEcho(const IPC::Message& message); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRescheduled(); 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnRegisterTransferBuffer(int32 id, 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::SharedMemoryHandle transfer_buffer, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint32 size); 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnDestroyTransferBuffer(int32 id); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetTransferBuffer(int32 id, IPC::Message* reply_message); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCreateVideoDecoder( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) media::VideoCodecProfile profile, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* reply_message); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetSurfaceVisible(bool visible); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDiscardBackbuffer(); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnEnsureBackbuffer(); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnRetireSyncPoint(uint32 sync_point); 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OnWaitSyncPoint(uint32 sync_point); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSyncPointRetired(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSignalSyncPoint(uint32 sync_point, uint32 id); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSignalSyncPointAck(uint32 id); 180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void OnSignalQuery(uint32 query, uint32 id); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnReceivedClientManagedMemoryStats(const GpuManagedMemoryStats& stats); 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void OnSetClientHasMemoryAllocationChangedCallback(bool has_callback); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnCommandProcessed(); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnParseError(); 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnSetLatencyInfo(const ui::LatencyInfo& latency_info); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ReportState(); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Wrapper for GpuScheduler::PutChanged that sets the crash report URL. 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PutChanged(); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Poll the command buffer to execute work. 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PollWork(); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Whether this command buffer needs to be polled again in the future. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool HasMoreWork(); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ScheduleDelayedWork(int64 delay); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool CheckContextLost(); 2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The lifetime of objects of this class is managed by a GpuChannel. The 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GpuChannels destroy all the GpuCommandBufferStubs that they own when they 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // are destroyed. So a raw pointer is safe. 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuChannel* channel_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The group of contexts that share namespaces with this context. 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<gpu::gles2::ContextGroup> context_group_; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GLSurfaceHandle handle_; 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size initial_size_; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gpu::gles2::DisallowedFeatures disallowed_features_; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string allowed_extensions_; 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<int32> requested_attribs_; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::GpuPreference gpu_preference_; 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool use_virtualized_gl_context_; 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 route_id_; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int32 surface_id_; 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool software_; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 last_flush_count_; 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::CommandBufferService> command_buffer_; 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::gles2::GLES2Decoder> decoder_; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<gpu::GpuScheduler> scheduler_; 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<gfx::GLSurface> surface_; 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<GpuMemoryManagerClientState> memory_manager_client_state_; 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The last memory allocation received from the GpuMemoryManager (used to 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // elide redundant work). 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool last_memory_allocation_valid_; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GpuMemoryAllocation last_memory_allocation_; 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GpuWatchdog* watchdog_; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ObserverList<DestructionObserver> destruction_observers_; 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A queue of sync points associated with this stub. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::deque<uint32> sync_points_; 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int sync_point_wait_count_; 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool delayed_work_scheduled_; 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) uint64 previous_messages_processed_; 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::TimeTicks last_idle_time_; 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<gpu::PreemptionFlag> preemption_flag_; 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 249c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LatencyInfoCallback latency_info_callback_; 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL active_url_; 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t active_url_hash_; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) size_t total_gpu_memory_; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(GpuCommandBufferStub); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_COMMON_GPU_GPU_COMMAND_BUFFER_STUB_H_ 262