Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1459)

Side by Side Diff: content/renderer/transport_texture_service.cc

Issue 7066035: Moved GPU related files in content/renderer into gpu subdirectory. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 "content/renderer/transport_texture_service.h"
6
7 #include "base/stl_util-inl.h"
8 #include "content/common/child_process.h"
9 #include "content/common/gpu/gpu_messages.h"
10 #include "content/renderer/transport_texture_host.h"
11
12 TransportTextureService::TransportTextureService()
13 : channel_(NULL),
14 next_host_id_(1) {
15 }
16
17 TransportTextureService::~TransportTextureService() {
18 STLDeleteElements(&pending_messages_);
19 }
20
21 void TransportTextureService::OnFilterAdded(IPC::Channel* channel) {
22 channel_ = channel;
23 router_.reset(new MessageRouter());
24
25 // Add all pending routes.
26 for (size_t i = 0; i < pending_routes_.size(); ++i)
27 router_->AddRoute(pending_routes_[i].first, pending_routes_[i].second);
28 pending_routes_.clear();
29
30 // Submit all pending messages.
31 for (size_t i = 0; i < pending_messages_.size(); ++i)
32 channel_->Send(pending_messages_[i]);
33 pending_messages_.clear();
34 }
35
36 void TransportTextureService::OnFilterRemoved() {
37 // TODO(hclam): Implement.
38 }
39
40 void TransportTextureService::OnChannelClosing() {
41 channel_ = NULL;
42 }
43
44 bool TransportTextureService::OnMessageReceived(const IPC::Message& msg) {
45 switch (msg.type()) {
46 case GpuTransportTextureHostMsg_TransportTextureCreated::ID:
47 case GpuTransportTextureHostMsg_CreateTextures::ID:
48 case GpuTransportTextureHostMsg_ReleaseTextures::ID:
49 case GpuTransportTextureHostMsg_TextureUpdated::ID:
50 if (!router_->RouteMessage(msg)) {
51 LOG(ERROR) << "GpuTransportTextureHostMsg cannot be dispatched.";
52 return false;
53 }
54 return true;
55 default:
56 return false;
57 }
58 }
59
60 scoped_refptr<TransportTextureHost>
61 TransportTextureService::CreateTransportTextureHost(
62 RendererGLContext* context, int context_route_id) {
63 #if !defined(OS_MACOSX)
64 // TODO(hclam): Check this is on Render Thread.
65
66 // Create the object and then add the route.
67 scoped_refptr<TransportTextureHost> host = new TransportTextureHost(
68 ChildProcess::current()->io_message_loop(), MessageLoop::current(),
69 this, this, context, context_route_id, next_host_id_);
70
71 // Add route in the IO thread.
72 ChildProcess::current()->io_message_loop()->PostTask(
73 FROM_HERE,
74 NewRunnableMethod(this, &TransportTextureService::AddRouteInternal,
75 next_host_id_, host));
76
77 // Increment host ID for next object.
78 ++next_host_id_;
79 return host;
80 #else
81 // TransportTextureHost has problem compiling on Mac so skip it.
82 return NULL;
83 #endif
84 }
85
86 void TransportTextureService::RemoveRoute(int32 host_id) {
87 ChildProcess::current()->io_message_loop()->PostTask(
88 FROM_HERE,
89 NewRunnableMethod(this, &TransportTextureService::RemoveRouteInternal,
90 host_id));
91 }
92
93 bool TransportTextureService::Send(IPC::Message* msg) {
94 ChildProcess::current()->io_message_loop()->PostTask(
95 FROM_HERE,
96 NewRunnableMethod(this, &TransportTextureService::SendInternal, msg));
97 return true;
98 }
99
100 void TransportTextureService::AddRouteInternal(
101 int32 host_id, IPC::Channel::Listener* listener) {
102 DCHECK_EQ(ChildProcess::current()->io_message_loop(),
103 MessageLoop::current());
104
105 // If router is there then just add the route, or we have to save it.
106 if (router_.get())
107 router_->AddRoute(host_id, listener);
108 else
109 pending_routes_.push_back(std::make_pair(host_id, listener));
110 }
111
112 void TransportTextureService::RemoveRouteInternal(int32 host_id) {
113 DCHECK_EQ(ChildProcess::current()->io_message_loop(),
114 MessageLoop::current());
115
116 if (router_.get())
117 router_->RemoveRoute(host_id);
118 }
119
120 void TransportTextureService::SendInternal(IPC::Message* msg) {
121 DCHECK_EQ(ChildProcess::current()->io_message_loop(),
122 MessageLoop::current());
123
124 if (channel_)
125 channel_->Send(msg);
126 else
127 pending_messages_.push_back(msg);
128 }
OLDNEW
« no previous file with comments | « content/renderer/transport_texture_service.h ('k') | content/renderer/webgraphicscontext3d_command_buffer_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698