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

Unified Diff: blimp/client/core/compositor/blimp_compositor_unittest.cc

Issue 2445093002: cc/blimp: Add synchronization for scroll/scale state. (Closed)
Patch Set: test compile Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « blimp/client/core/compositor/blimp_compositor.cc ('k') | blimp/client/core/render_widget/blimp_document.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: blimp/client/core/compositor/blimp_compositor_unittest.cc
diff --git a/blimp/client/core/compositor/blimp_compositor_unittest.cc b/blimp/client/core/compositor/blimp_compositor_unittest.cc
index 1425f8702515b6b00f21439b13b43393ebe179e3..9c7d18634bc696457acc94f21c2e4d7e2e7631bc 100644
--- a/blimp/client/core/compositor/blimp_compositor_unittest.cc
+++ b/blimp/client/core/compositor/blimp_compositor_unittest.cc
@@ -8,58 +8,27 @@
#include "base/threading/thread_task_runner_handle.h"
#include "blimp/client/core/compositor/blimp_compositor_dependencies.h"
#include "blimp/client/core/compositor/blob_image_serialization_processor.h"
+#include "blimp/client/test/compositor/blimp_compositor_with_fake_host.h"
#include "blimp/client/test/compositor/mock_compositor_dependencies.h"
#include "cc/layers/layer.h"
#include "cc/proto/compositor_message.pb.h"
#include "cc/surfaces/surface_manager.h"
-#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-using testing::_;
-
namespace blimp {
namespace client {
+namespace {
-class MockBlimpCompositorClient : public BlimpCompositorClient {
- public:
- MockBlimpCompositorClient() = default;
- ~MockBlimpCompositorClient() override = default;
-
- void SendCompositorMessage(
- const cc::proto::CompositorMessage& message) override {
- MockableSendCompositorMessage();
- }
-
- MOCK_METHOD0(MockableSendCompositorMessage, void());
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockBlimpCompositorClient);
-};
-
-class BlimpCompositorForTesting : public BlimpCompositor {
+class BlimpCompositorTest : public testing::Test, public BlimpCompositorClient {
public:
- BlimpCompositorForTesting(
- BlimpCompositorDependencies* compositor_dependencies,
- BlimpCompositorClient* client)
- : BlimpCompositor(compositor_dependencies, client, false) {}
-
- void SendProto(const cc::proto::CompositorMessage& proto) {
- SendCompositorProto(proto);
- }
-
- cc::LayerTreeHost* host() const { return host_.get(); }
-};
-
-class BlimpCompositorTest : public testing::Test {
- public:
- BlimpCompositorTest() : loop_(new base::MessageLoop) {}
+ BlimpCompositorTest() = default;
+ ~BlimpCompositorTest() override = default;
void SetUp() override {
compositor_dependencies_ = base::MakeUnique<BlimpCompositorDependencies>(
base::MakeUnique<MockCompositorDependencies>());
-
- compositor_ = base::MakeUnique<BlimpCompositorForTesting>(
- compositor_dependencies_.get(), &compositor_client_);
+ compositor_ = BlimpCompositorWithFakeHost::Create(
+ compositor_dependencies_.get(), this);
}
void TearDown() override {
@@ -67,31 +36,91 @@ class BlimpCompositorTest : public testing::Test {
compositor_dependencies_.reset();
}
- ~BlimpCompositorTest() override {}
+ void SendFrameUpdate(scoped_refptr<cc::Layer> root_layer) {
+ compositor_->OnCompositorMessageReceived(
+ compositor_->CreateFakeUpdate(root_layer));
+ }
+
+ void SendClientStateUpdateAck() {
+ std::unique_ptr<cc::proto::CompositorMessage> message =
+ base::MakeUnique<cc::proto::CompositorMessage>();
+ message->set_client_state_update_ack(true);
+ compositor_->OnCompositorMessageReceived(std::move(message));
+ }
- std::unique_ptr<base::MessageLoop> loop_;
- MockBlimpCompositorClient compositor_client_;
+ // BlimpCompositorClient implementation.
+ void SendCompositorMessage(
+ const cc::proto::CompositorMessage& message) override {
+ if (message.has_client_state_update())
+ client_state_updates_++;
+ if (message.has_frame_ack())
+ frame_acks_++;
+ }
+
+ int client_state_updates() const { return client_state_updates_; }
+ int frame_acks() const { return frame_acks_; }
+
+ protected:
+ base::MessageLoop loop_;
std::unique_ptr<BlimpCompositorDependencies> compositor_dependencies_;
- std::unique_ptr<BlimpCompositorForTesting> compositor_;
+ std::unique_ptr<BlimpCompositorWithFakeHost> compositor_;
BlobImageSerializationProcessor blob_image_serialization_processor_;
+
+ private:
+ int client_state_updates_ = 0;
+ int frame_acks_ = 0;
};
-TEST_F(BlimpCompositorTest, ToggleVisibilityWithHost) {
- compositor_->SetVisible(true);
+TEST_F(BlimpCompositorTest, FrameAck) {
+ // Send a frame and run a local frame update.
+ scoped_refptr<cc::Layer> engine_root_layer = cc::Layer::Create();
+ SendFrameUpdate(engine_root_layer);
+ compositor_->UpdateLayerTreeHost();
+
+ // There should be a local root layer for this engine root layer.
+ cc::Layer* client_root_layer =
+ compositor_->compositor_state_deserializer_for_testing()
+ ->GetLayerForEngineId(engine_root_layer->id());
+ EXPECT_EQ(client_root_layer,
+ compositor_->host()->GetLayerTree()->root_layer());
+
+ // We should have a received an ack for this frame.
+ EXPECT_EQ(1, frame_acks());
+}
+
+TEST_F(BlimpCompositorTest, WaitsForClientAckToFlushState) {
+ EXPECT_EQ(compositor_->host()->reflected_main_frame_state_for_testing(),
+ nullptr);
+
+ // Tell the compositor that the local state was modified and run a frame
+ // update. This should trigger a client state flush.
+ compositor_->DidUpdateLocalState();
+ compositor_->UpdateLayerTreeHost();
+ EXPECT_EQ(1, client_state_updates());
+ // On each update, the reflected main frame state should be sent to the impl
+ // thread.
+ EXPECT_NE(compositor_->host()->reflected_main_frame_state_for_testing(),
+ nullptr);
+
+ // Now do this again while the ack for the previous state update is pending,
+ // the compositor should wait for an ack.
+ compositor_->DidUpdateLocalState();
+ compositor_->UpdateLayerTreeHost();
+ EXPECT_EQ(1, client_state_updates());
+
+ // Send a state ack, this should cause the state to be flushed.
+ SendClientStateUpdateAck();
+ EXPECT_EQ(2, client_state_updates());
+}
- // Check that the visibility is set correctly on the host.
+TEST_F(BlimpCompositorTest, Visible) {
+ compositor_->SetVisible(true);
EXPECT_TRUE(compositor_->host()->IsVisible());
- // Make the compositor invisible. This should make the |host_| invisible.
compositor_->SetVisible(false);
EXPECT_FALSE(compositor_->host()->IsVisible());
}
-TEST_F(BlimpCompositorTest, MessagesHaveCorrectId) {
- EXPECT_CALL(compositor_client_, MockableSendCompositorMessage()).Times(1);
-
- compositor_->SendProto(cc::proto::CompositorMessage());
-}
-
+} // namespace
} // namespace client
} // namespace blimp
« no previous file with comments | « blimp/client/core/compositor/blimp_compositor.cc ('k') | blimp/client/core/render_widget/blimp_document.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698