summaryrefslogtreecommitdiffstats
path: root/cc/surfaces
diff options
context:
space:
mode:
authorjbauman <jbauman@chromium.org>2015-10-23 15:06:05 -0700
committerCommit bot <commit-bot@chromium.org>2015-10-23 22:07:57 +0000
commit229df0978a570456ddf96531bc0c8c68af3a33e1 (patch)
treecbf17e36d04f8e04a967f3ff81e98d17caf1f7d9 /cc/surfaces
parent0f19329c1ed2396bb5eaf7549080f6ca9a00a89c (diff)
downloadchromium_src-229df0978a570456ddf96531bc0c8c68af3a33e1.zip
chromium_src-229df0978a570456ddf96531bc0c8c68af3a33e1.tar.gz
chromium_src-229df0978a570456ddf96531bc0c8c68af3a33e1.tar.bz2
Revert of Add mechanism to signal DelegatedFrameHost that a surface is about to draw. (patchset #1 id:1 of https://codereview.chromium.org/1408173002/ )
Reason for revert: Causes issue when capturing hidden tabs. BUG=545720 Original issue's description: > Reland of Add mechanism to signal DelegatedFrameHost that a surface is about to draw. (patchset #1 id:1 of https://codereview.chromium.org/1407173002/ ) > > Reason for revert: > Memory failure was fixed in r354541. > > Original issue's description: > > Revert of Add mechanism to signal DelegatedFrameHost that a surface is about to draw. (patchset #7 id:120001 of https://codereview.chromium.org/1365793002/ ) > > > > Reason for revert: > > Causing memory failures on SurfaceAggregatorValidSurfaceTest.CopyRequest in cc_unittests on > > http://build.chromium.org/p/chromium.memory.fyi/builders/Linux%20MSan%20Tests/builds/10514 > > and > > http://build.chromium.org/p/chromium.memory.fyi/builders/Linux%20ChromeOS%20MSan%20Tests/builds/4653 > > > > [ RUN ] SurfaceAggregatorValidSurfaceTest.CopyRequest > > ==31905==WARNING: MemorySanitizer: use-of-uninitialized-value > > #0 0x7fccb3920f7e in cc::Surface::RequestCopyOfOutput(scoped_ptr\u003Ccc::CopyOutputRequest, base::DefaultDeleter\u003Ccc::CopyOutputRequest> >) cc/surfaces/surface.cc:106:15 > > #1 0x7fccb3942ec9 in cc::SurfaceFactory::RequestCopyOfSurface(cc::SurfaceId, scoped_ptr\u003Ccc::CopyOutputRequest, base::DefaultDeleter\u003Ccc::CopyOutputRequest> >) cc/surfaces/surface_factory.cc:75:3 > > #2 0x7fccb31ce931 in cc::(anonymous namespace)::SurfaceAggregatorValidSurfaceTest_CopyRequest_Test::TestBody() cc/surfaces/surface_aggregator_unittest.cc:285:3 > > #3 0x7fccb33160d2 in HandleExceptionsInMethodIfSupported\u003Ctesting::Test, void> testing/gtest/src/gtest.cc:2458:12 > > #4 0x7fccb33160d2 in testing::Test::Run() testing/gtest/src/gtest.cc:2474:0 > > #5 0x7fccb331972c in testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:5 > > #6 0x7fccb331b0a2 in testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:5 > > #7 0x7fccb333948b in testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:11 > > #8 0x7fccb3338468 in HandleExceptionsInMethodIfSupported\u003Ctesting::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 > > #9 0x7fccb3338468 in testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255:0 > > #10 0x7fccb32867da in RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:10 > > #11 0x7fccb32867da in base::TestSuite::Run() base/test/test_suite.cc:230:0 > > #12 0x7fccb327388e in Run base/callback.h:396:12 > > #13 0x7fccb327388e in base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback\u003Cint ()> const&, int, bool, base::Callback\u003Cvoid ()> const&) base/test/launcher/unit_test_launcher.cc:187:0 > > #14 0x7fccb32730de in base::LaunchUnitTests(int, char**, base::Callback\u003Cint ()> const&) base/test/launcher/unit_test_launcher.cc:426:10 > > #15 0x7fccb0ba0c15 in main cc/test/run_all_unittests.cc:12:10 > > #16 0x7fccaa41076c in __libc_start_main /build/buildd/eglibc-2.15/csu/libc-start.c:226:0 > > #17 0x7fccb0b41ca8 in _start ??:0:0 > > > > Uninitialized value was created by a heap allocation > > #0 0x7fccb0b9fd92 in operator new(unsigned long) ??:0:0 > > #1 0x7fccb31ce897 in CreateEmptyRequest cc/output/copy_output_request.h:26:28 > > #2 0x7fccb31ce897 in cc::(anonymous namespace)::SurfaceAggregatorValidSurfaceTest_CopyRequest_Test::TestBody() cc/surfaces/surface_aggregator_unittest.cc:283:0 > > #3 0x7fccb33160d2 in HandleExceptionsInMethodIfSupported\u003Ctesting::Test, void> testing/gtest/src/gtest.cc:2458:12 > > #4 0x7fccb33160d2 in testing::Test::Run() testing/gtest/src/gtest.cc:2474:0 > > #5 0x7fccb331972c in testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:5 > > #6 0x7fccb331b0a2 in testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:5 > > #7 0x7fccb333948b in testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:11 > > #8 0x7fccb3338468 in HandleExceptionsInMethodIfSupported\u003Ctesting::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 > > #9 0x7fccb3338468 in testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255:0 > > #10 0x7fccb32867da in RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:10 > > #11 0x7fccb32867da in base::TestSuite::Run() base/test/test_suite.cc:230:0 > > #12 0x7fccb327388e in Run base/callback.h:396:12 > > #13 0x7fccb327388e in base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback\u003Cint ()> const&, int, bool, base::Callback\u003Cvoid ()> const&) base/test/launcher/unit_test_launcher.cc:187:0 > > #14 0x7fccb32730de in base::LaunchUnitTests(int, char**, base::Callback\u003Cint ()> const&) base/test/launcher/unit_test_launcher.cc:426:10 > > #15 0x7fccb0ba0c15 in main cc/test/run_all_unittests.cc:12:10 > > #16 0x7fccaa41076c in __libc_start_main /build/buildd/eglibc-2.15/csu/libc-start.c:226:0 > > > > SUMMARY: MemorySanitizer: use-of-uninitialized-value (/tmp/runqXGplV/out/Release/cc_unittests+0x32e1f7e) > > Exiting > > > > Original issue's description: > > > Add mechanism to signal DelegatedFrameHost that a surface is about to draw. > > > > > > This allows the FrameSubscriber to request a copy of the output even when the renderer it's subscribing to hasn't changed its contents, but a child renderer (oopif or webview) has. > > > > > > BUG=529378 > > > CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel > > > > > > Committed: https://crrev.com/5ed9ab93dd9f448aac722483b6adc6b7a14cdf4b > > > Cr-Commit-Position: refs/heads/master@{#354390} > > > > TBR=miu@chromium.org,sadrul@chromium.org,jbauman@chromium.org > > NOPRESUBMIT=true > > NOTREECHECKS=true > > NOTRY=true > > BUG=529378 > > > > Committed: https://crrev.com/1b8d59763b4266783794a950eee388ddc110ada6 > > Cr-Commit-Position: refs/heads/master@{#354446} > > TBR=miu@chromium.org,sadrul@chromium.org,mpearson@chromium.org > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=529378 > > Committed: https://crrev.com/5d4462e0e51ee42fa884e7a84f7749eeca9be49c > Cr-Commit-Position: refs/heads/master@{#354554} TBR=miu@chromium.org,sadrul@chromium.org,mpearson@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=529378 CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel Review URL: https://codereview.chromium.org/1412223010 Cr-Commit-Position: refs/heads/master@{#355900}
Diffstat (limited to 'cc/surfaces')
-rw-r--r--cc/surfaces/surface.cc19
-rw-r--r--cc/surfaces/surface_aggregator.cc10
-rw-r--r--cc/surfaces/surface_aggregator_unittest.cc12
-rw-r--r--cc/surfaces/surface_factory.cc5
-rw-r--r--cc/surfaces/surface_factory.h3
-rw-r--r--cc/surfaces/surface_factory_client.h5
-rw-r--r--cc/surfaces/surface_factory_unittest.cc58
7 files changed, 7 insertions, 105 deletions
diff --git a/cc/surfaces/surface.cc b/cc/surfaces/surface.cc
index 0ffd522..32f41f1 100644
--- a/cc/surfaces/surface.cc
+++ b/cc/surfaces/surface.cc
@@ -101,22 +101,11 @@ void Surface::QueueFrame(scoped_ptr<CompositorFrame> frame,
void Surface::RequestCopyOfOutput(scoped_ptr<CopyOutputRequest> copy_request) {
if (current_frame_ &&
- !current_frame_->delegated_frame_data->render_pass_list.empty()) {
- ScopedPtrVector<CopyOutputRequest>& copy_requests =
- current_frame_->delegated_frame_data->render_pass_list.back()
- ->copy_requests;
-
- if (void* source = copy_request->source()) {
- // Remove existing CopyOutputRequests made on the Surface by the same
- // source.
- auto to_remove = copy_requests.remove_if([source](
- const CopyOutputRequest* x) { return x->source() == source; });
- copy_requests.erase(to_remove, copy_requests.end());
- }
- copy_requests.push_back(copy_request.Pass());
- } else {
+ !current_frame_->delegated_frame_data->render_pass_list.empty())
+ current_frame_->delegated_frame_data->render_pass_list.back()
+ ->copy_requests.push_back(copy_request.Pass());
+ else
copy_request->SendEmptyResult();
- }
}
void Surface::TakeCopyOutputRequests(
diff --git a/cc/surfaces/surface_aggregator.cc b/cc/surfaces/surface_aggregator.cc
index 967f496..25c2584 100644
--- a/cc/surfaces/surface_aggregator.cc
+++ b/cc/surfaces/surface_aggregator.cc
@@ -571,6 +571,9 @@ gfx::Rect SurfaceAggregator::PrewalkTree(SurfaceId surface_id) {
if (provider_)
provider_->DeclareUsedResourcesFromChild(child_id, referenced_resources);
+ for (const auto& render_pass : frame_data->render_pass_list)
+ has_copy_requests_ |= !render_pass->copy_requests.empty();
+
gfx::Rect damage_rect;
if (!frame_data->render_pass_list.empty()) {
RenderPass* last_pass = frame_data->render_pass_list.back();
@@ -587,13 +590,6 @@ gfx::Rect SurfaceAggregator::PrewalkTree(SurfaceId surface_id) {
damage_rect.Union(
MathUtil::MapEnclosingClippedRect(surface_info.second, surface_damage));
}
-
- if (surface->factory())
- surface->factory()->WillDrawSurface(surface->surface_id(), damage_rect);
-
- for (const auto& render_pass : frame_data->render_pass_list)
- has_copy_requests_ |= !render_pass->copy_requests.empty();
-
referenced_surfaces_.erase(it);
return damage_rect;
}
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc
index 3c18dfe..7696b74 100644
--- a/cc/surfaces/surface_aggregator_unittest.cc
+++ b/cc/surfaces/surface_aggregator_unittest.cc
@@ -44,16 +44,8 @@ class EmptySurfaceFactoryClient : public SurfaceFactoryClient {
public:
void ReturnResources(const ReturnedResourceArray& resources) override {}
- void WillDrawSurface(SurfaceId id, const gfx::Rect& damage_rect) override {
- last_surface_id_ = id;
- last_damage_rect_ = damage_rect;
- }
-
void SetBeginFrameSource(SurfaceId surface_id,
BeginFrameSource* begin_frame_source) override {}
-
- gfx::Rect last_damage_rect_;
- SurfaceId last_surface_id_;
};
class FakeSurfaceAggregatorClient : public SurfaceAggregatorClient {
@@ -211,10 +203,6 @@ TEST_F(SurfaceAggregatorValidSurfaceTest, SimpleFrame) {
EXPECT_FALSE(surface_aggregator_client_.HasSurface(root_surface_));
AggregateAndVerify(passes, arraysize(passes), ids, arraysize(ids));
EXPECT_TRUE(surface_aggregator_client_.HasSurface(root_surface_));
-
- // Check that WillDrawSurface was called.
- EXPECT_EQ(gfx::Rect(SurfaceSize()), empty_client_.last_damage_rect_);
- EXPECT_EQ(root_surface_id_, empty_client_.last_surface_id_);
}
TEST_F(SurfaceAggregatorValidSurfaceTest, OpacityCopied) {
diff --git a/cc/surfaces/surface_factory.cc b/cc/surfaces/surface_factory.cc
index b71994e..b35380e 100644
--- a/cc/surfaces/surface_factory.cc
+++ b/cc/surfaces/surface_factory.cc
@@ -82,11 +82,6 @@ void SurfaceFactory::RequestCopyOfSurface(
manager_->SurfaceModified(surface_id);
}
-void SurfaceFactory::WillDrawSurface(SurfaceId id,
- const gfx::Rect& damage_rect) {
- client_->WillDrawSurface(id, damage_rect);
-}
-
void SurfaceFactory::ReceiveFromChild(
const TransferableResourceArray& resources) {
holder_.ReceiveFromChild(resources);
diff --git a/cc/surfaces/surface_factory.h b/cc/surfaces/surface_factory.h
index 1347728..e8e4e9d 100644
--- a/cc/surfaces/surface_factory.h
+++ b/cc/surfaces/surface_factory.h
@@ -11,7 +11,6 @@
#include "base/containers/scoped_ptr_hash_map.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
-#include "base/observer_list.h"
#include "cc/output/compositor_frame.h"
#include "cc/surfaces/surface_id.h"
#include "cc/surfaces/surface_resource_holder.h"
@@ -61,8 +60,6 @@ class CC_SURFACES_EXPORT SurfaceFactory
void RequestCopyOfSurface(SurfaceId surface_id,
scoped_ptr<CopyOutputRequest> copy_request);
- void WillDrawSurface(SurfaceId id, const gfx::Rect& damage_rect);
-
SurfaceFactoryClient* client() { return client_; }
void ReceiveFromChild(const TransferableResourceArray& resources);
diff --git a/cc/surfaces/surface_factory_client.h b/cc/surfaces/surface_factory_client.h
index e79b185..169910a 100644
--- a/cc/surfaces/surface_factory_client.h
+++ b/cc/surfaces/surface_factory_client.h
@@ -6,9 +6,7 @@
#define CC_SURFACES_SURFACE_FACTORY_CLIENT_H_
#include "cc/resources/returned_resource.h"
-#include "cc/surfaces/surface_id.h"
#include "cc/surfaces/surfaces_export.h"
-#include "ui/gfx/geometry/rect.h"
namespace cc {
@@ -21,9 +19,6 @@ class CC_SURFACES_EXPORT SurfaceFactoryClient {
virtual void ReturnResources(const ReturnedResourceArray& resources) = 0;
- virtual void WillDrawSurface(SurfaceId surface_id,
- const gfx::Rect& damage_rect) {}
-
// This allows the SurfaceFactory to tell it's client what BeginFrameSource
// to use for a given surface_id.
// If there are multiple active surface_ids, it is the client's
diff --git a/cc/surfaces/surface_factory_unittest.cc b/cc/surfaces/surface_factory_unittest.cc
index d516aa3..9e7bc153 100644
--- a/cc/surfaces/surface_factory_unittest.cc
+++ b/cc/surfaces/surface_factory_unittest.cc
@@ -4,8 +4,6 @@
#include "base/bind.h"
#include "cc/output/compositor_frame.h"
-#include "cc/output/copy_output_request.h"
-#include "cc/output/copy_output_result.h"
#include "cc/output/delegated_frame_data.h"
#include "cc/resources/resource_provider.h"
#include "cc/surfaces/surface.h"
@@ -531,62 +529,6 @@ TEST_F(SurfaceFactoryTest, DestroyCycle) {
surface_id_ = SurfaceId();
}
-void CopyRequestTestCallback(bool* called,
- scoped_ptr<CopyOutputResult> result) {
- *called = true;
-}
-
-TEST_F(SurfaceFactoryTest, DuplicateCopyRequest) {
- {
- scoped_ptr<RenderPass> render_pass(RenderPass::Create());
- render_pass->referenced_surfaces.push_back(surface_id_);
- scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
- frame_data->render_pass_list.push_back(render_pass.Pass());
- scoped_ptr<CompositorFrame> frame(new CompositorFrame);
- frame->delegated_frame_data = frame_data.Pass();
- factory_->SubmitCompositorFrame(surface_id_, frame.Pass(),
- SurfaceFactory::DrawCallback());
- }
- void* source1 = &source1;
- void* source2 = &source2;
-
- bool called1 = false;
- scoped_ptr<CopyOutputRequest> request;
- request = CopyOutputRequest::CreateRequest(
- base::Bind(&CopyRequestTestCallback, &called1));
- request->set_source(source1);
-
- factory_->RequestCopyOfSurface(surface_id_, request.Pass());
- EXPECT_FALSE(called1);
-
- bool called2 = false;
- request = CopyOutputRequest::CreateRequest(
- base::Bind(&CopyRequestTestCallback, &called2));
- request->set_source(source2);
-
- factory_->RequestCopyOfSurface(surface_id_, request.Pass());
- // Callbacks have different sources so neither should be called.
- EXPECT_FALSE(called1);
- EXPECT_FALSE(called2);
-
- bool called3 = false;
- request = CopyOutputRequest::CreateRequest(
- base::Bind(&CopyRequestTestCallback, &called3));
- request->set_source(source1);
-
- factory_->RequestCopyOfSurface(surface_id_, request.Pass());
- // Two callbacks are from source1, so the first should be called.
- EXPECT_TRUE(called1);
- EXPECT_FALSE(called2);
- EXPECT_FALSE(called3);
-
- factory_->Destroy(surface_id_);
- surface_id_ = SurfaceId();
- EXPECT_TRUE(called1);
- EXPECT_TRUE(called2);
- EXPECT_TRUE(called3);
-}
-
// Verifies BFS is forwarded to the client.
TEST_F(SurfaceFactoryTest, SetBeginFrameSource) {
FakeBeginFrameSource bfs1;