forked from flutter/engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Reland PerformanceOverlayLayer golden test (flutter#8140)
This reverts commit f1f19bb. Now we shouldn't break the engine build as https://chromium-review.googlesource.com/c/chromium/tools/build/+/1480746 is landed. The golden test is disabled by default and we'll enable it later in our recipe and test it in presubmit tests.
- Loading branch information
Showing
9 changed files
with
234 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/* | ||
* Copyright 2017 Google, Inc. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#include "flutter/fml/command_line.h" | ||
#include "flutter/fml/logging.h" | ||
#include "gtest/gtest.h" | ||
|
||
#include "flow_test_utils.h" | ||
|
||
int main(int argc, char** argv) { | ||
testing::InitGoogleTest(&argc, argv); | ||
fml::CommandLine cmd = fml::CommandLineFromArgcArgv(argc, argv); | ||
flow::SetGoldenDir( | ||
cmd.GetOptionValueWithDefault("golden-dir", "flutter/testing/resources")); | ||
flow::SetFontFile(cmd.GetOptionValueWithDefault( | ||
"font-file", | ||
"flutter/third_party/txt/third_party/fonts/Roboto-Regular.ttf")); | ||
return RUN_ALL_TESTS(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
/* | ||
* Copyright 2017 Google, Inc. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#include <string> | ||
|
||
namespace flow { | ||
|
||
static std::string gGoldenDir; | ||
static std::string gFontFile; | ||
|
||
const std::string& GetGoldenDir() { | ||
return gGoldenDir; | ||
} | ||
|
||
void SetGoldenDir(const std::string& dir) { | ||
gGoldenDir = dir; | ||
} | ||
|
||
const std::string& GetFontFile() { | ||
return gFontFile; | ||
} | ||
|
||
void SetFontFile(const std::string& file) { | ||
gFontFile = file; | ||
} | ||
|
||
} // namespace flow |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/* | ||
* Copyright 2017 Google, Inc. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
#include <string> | ||
|
||
namespace flow { | ||
|
||
const std::string& GetGoldenDir(); | ||
|
||
void SetGoldenDir(const std::string& dir); | ||
|
||
const std::string& GetFontFile(); | ||
|
||
void SetFontFile(const std::string& dir); | ||
|
||
} // namespace flow |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
// Copyright 2013 The Flutter 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 "flutter/flow/flow_test_utils.h" | ||
#include "flutter/flow/layers/performance_overlay_layer.h" | ||
#include "flutter/flow/raster_cache.h" | ||
|
||
#include "third_party/skia/include/core/SkSurface.h" | ||
#include "third_party/skia/include/utils/SkBase64.h" | ||
|
||
#include "gtest/gtest.h" | ||
|
||
// To get the size of kMockedTimes in compile time. | ||
template <class T, std::size_t N> | ||
constexpr int size(const T (&array)[N]) noexcept { | ||
return N; | ||
} | ||
|
||
constexpr int kMockedTimes[] = {17, 1, 4, 24, 4, 25, 30, 4, 13, 34, | ||
14, 0, 18, 9, 32, 36, 26, 23, 5, 8, | ||
32, 18, 29, 16, 29, 18, 0, 36, 33, 10}; | ||
|
||
// Relative to the flutter/src/engine/flutter directory | ||
const char* kGoldenFileName = "performance_overlay_gold.png"; | ||
|
||
// Relative to the flutter/src/engine/flutter directory | ||
const char* kNewGoldenFileName = "performance_overlay_gold_new.png"; | ||
|
||
TEST(PerformanceOverlayLayer, Gold) { | ||
const std::string& golden_dir = flow::GetGoldenDir(); | ||
// This unit test should only be run on Linux (not even on Mac since it's a | ||
// golden test). Hence we don't have to worry about the "/" vs. "\". | ||
std::string golden_file_path = golden_dir + "/" + kGoldenFileName; | ||
std::string new_golden_file_path = golden_dir + "/" + kNewGoldenFileName; | ||
|
||
flow::Stopwatch mock_stopwatch; | ||
for (int i = 0; i < size(kMockedTimes); ++i) { | ||
mock_stopwatch.SetLapTime( | ||
fml::TimeDelta::FromMilliseconds(kMockedTimes[i])); | ||
} | ||
|
||
const SkImageInfo image_info = SkImageInfo::MakeN32Premul(1000, 1000); | ||
sk_sp<SkSurface> surface = SkSurface::MakeRaster(image_info); | ||
|
||
ASSERT_TRUE(surface != nullptr); | ||
|
||
flow::TextureRegistry unused_texture_registry; | ||
|
||
flow::Layer::PaintContext paintContext = { | ||
nullptr, surface->getCanvas(), nullptr, mock_stopwatch, | ||
mock_stopwatch, unused_texture_registry, nullptr, false}; | ||
|
||
// Specify font file to ensure the same font across different operation | ||
// systems. | ||
flow::PerformanceOverlayLayer layer(flow::kDisplayRasterizerStatistics | | ||
flow::kVisualizeRasterizerStatistics | | ||
flow::kDisplayEngineStatistics | | ||
flow::kVisualizeEngineStatistics, | ||
flow::GetFontFile().c_str()); | ||
layer.set_paint_bounds(SkRect::MakeWH(1000, 400)); | ||
surface->getCanvas()->clear(SK_ColorTRANSPARENT); | ||
layer.Paint(paintContext); | ||
|
||
sk_sp<SkImage> snapshot = surface->makeImageSnapshot(); | ||
sk_sp<SkData> snapshot_data = snapshot->encodeToData(); | ||
|
||
sk_sp<SkData> golden_data = | ||
SkData::MakeFromFileName(golden_file_path.c_str()); | ||
EXPECT_TRUE(golden_data != nullptr) | ||
<< "Golden file not found: " << golden_file_path << ".\n" | ||
<< "Please either set --golden-dir, or make sure that the unit test is " | ||
<< "run from the right directory (e.g., flutter/engine/src)."; | ||
|
||
const bool golden_data_matches = golden_data->equals(snapshot_data.get()); | ||
if (!golden_data_matches) { | ||
SkFILEWStream wstream(new_golden_file_path.c_str()); | ||
wstream.write(snapshot_data->data(), snapshot_data->size()); | ||
wstream.flush(); | ||
|
||
size_t b64_size = | ||
SkBase64::Encode(snapshot_data->data(), snapshot_data->size(), nullptr); | ||
sk_sp<SkData> b64_data = SkData::MakeUninitialized(b64_size + 1); | ||
char* b64_char = static_cast<char*>(b64_data->writable_data()); | ||
SkBase64::Encode(snapshot_data->data(), snapshot_data->size(), b64_char); | ||
b64_char[b64_size] = 0; // make it null terminated for printing | ||
|
||
EXPECT_TRUE(golden_data_matches) | ||
<< "Golden file mismatch. Please check " | ||
<< "the difference between " << kGoldenFileName << " and " | ||
<< kNewGoldenFileName << ", and replace the former " | ||
<< "with the latter if the difference looks good.\n\n" | ||
<< "See also the base64 encoded " << kNewGoldenFileName << ":\n" | ||
<< b64_char; | ||
} | ||
} |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.