Import Cobalt 20.master.0.220639
diff --git a/src/base/logging.cc b/src/base/logging.cc index 466868e..718d52a 100644 --- a/src/base/logging.cc +++ b/src/base/logging.cc
@@ -558,6 +558,30 @@ #endif } +#if defined(OFFICIAL_BUILD) +int GetMinLogLevel() { + return LOG_NUM_SEVERITIES; +} + +bool ShouldCreateLogMessage(int /*severity*/) { + return false; +} + +int GetVlogVerbosity() { + return LOG_INFO - GetMinLogLevel(); +} + +int GetVlogLevelHelper(const char* /*file*/, size_t /*N*/) { + return GetVlogVerbosity(); +} + +void SetLogItems(bool /*enable_process_id*/, bool /*enable_thread_id*/, + bool /*enable_timestamp*/, bool /*enable_tickcount*/) {} + +void SetLogPrefix(const char* /*prefix*/) {} + +#else // defined(OFFICIAL_BUILD) + int GetMinLogLevel() { return g_min_log_level; } @@ -600,6 +624,7 @@ base::ContainsOnlyChars(prefix, "abcdefghijklmnopqrstuvwxyz")); g_log_prefix = prefix; } +#endif // defined(OFFICIAL_BUILD) void SetShowErrorDialogs(bool enable_dialogs) { show_error_dialogs = enable_dialogs;
diff --git a/src/base/logging.h b/src/base/logging.h index 1c0d669..da6384d 100644 --- a/src/base/logging.h +++ b/src/base/logging.h
@@ -411,8 +411,13 @@ // As special cases, we can assume that LOG_IS_ON(FATAL) always holds. Also, // LOG_IS_ON(DFATAL) always holds in debug mode. In particular, CHECK()s will // always fire if they fail. + +#if defined(OFFICIAL_BUILD) +#define LOG_IS_ON(severity) false +#else // defined(OFFICIAL_BUILD) #define LOG_IS_ON(severity) \ (::logging::ShouldCreateLogMessage(::logging::LOG_##severity)) +#endif // defined(OFFICIAL_BUILD) // We can't do any caching tricks with VLOG_IS_ON() like the // google-glog version since it requires GCC extensions. This means
diff --git a/src/base/message_loop/message_pump_io_starboard.cc b/src/base/message_loop/message_pump_io_starboard.cc index cfe3955..767dd1b 100644 --- a/src/base/message_loop/message_pump_io_starboard.cc +++ b/src/base/message_loop/message_pump_io_starboard.cc
@@ -145,10 +145,10 @@ } // Set current interest mask and waiter for this event. - bool result = - SbSocketWaiterAdd(waiter_, socket, controller, OnSocketWaiterNotification, - interests, persistent); - DCHECK(result); + if (!SbSocketWaiterAdd(waiter_, socket, controller, + OnSocketWaiterNotification, interests, persistent)) { + return false; + } controller->Init(socket, persistent); controller->set_watcher(delegate);
diff --git a/src/base/test/main_hook.cc b/src/base/test/main_hook.cc index b5cafca..0478d99 100644 --- a/src/base/test/main_hook.cc +++ b/src/base/test/main_hook.cc
@@ -9,10 +9,6 @@ #include "base/command_line.h" #endif -#if defined(COBALT_BUILD_TYPE_GOLD) -#error You cannot build unit tests in gold builds. -#endif - #if defined(__LB_SHELL__) || defined(COBALT) base::AtExitManager* platform_at_exit_manager_;
diff --git a/src/cobalt/CHANGELOG.md b/src/cobalt/CHANGELOG.md index 45f312d..6bd4d82 100644 --- a/src/cobalt/CHANGELOG.md +++ b/src/cobalt/CHANGELOG.md
@@ -49,7 +49,8 @@ - **Added support for Device Authentication URL signing.** Cobalt will now add URL parameters signed with the device's secret key and - certification scope to the initial URL. + certification scope to the initial URL. For more information, see + [doc/device_authentication.md](doc/device_authentication.md). - **Updated Chromium net and base libraries from m25 to m70.**
diff --git a/src/cobalt/accessibility/accessibility.gyp b/src/cobalt/accessibility/accessibility.gyp deleted file mode 100644 index cb497fd..0000000 --- a/src/cobalt/accessibility/accessibility.gyp +++ /dev/null
@@ -1,39 +0,0 @@ -# Copyright 2017 The Cobalt Authors. All Rights Reserved. -# -# 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 specif - -{ - 'targets': [ - { - 'target_name': 'accessibility', - 'type': 'static_library', - 'sources': [ - 'internal/live_region.cc', - 'internal/live_region.h', - 'internal/text_alternative_helper.cc', - 'internal/text_alternative_helper.h', - 'screen_reader.cc', - 'screen_reader.h', - 'starboard_tts_engine.cc', - 'starboard_tts_engine.h', - 'text_alternative.cc', - 'text_alternative.h', - 'tts_engine.h', - 'tts_logger.h', - ], - 'dependencies': [ - '<(DEPTH)/cobalt/base/base.gyp:base', - '<(DEPTH)/cobalt/dom/dom.gyp:dom', - ], - }, - ] -}
diff --git a/src/cobalt/accessibility/accessibility_test.gyp b/src/cobalt/accessibility/accessibility_test.gyp deleted file mode 100644 index acede3d..0000000 --- a/src/cobalt/accessibility/accessibility_test.gyp +++ /dev/null
@@ -1,57 +0,0 @@ -# Copyright 2017 The Cobalt Authors. All Rights Reserved. -# -# 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 specif - -{ - 'targets': [ - { - 'target_name': 'accessibility_test', - 'type': '<(gtest_target_type)', - 'sources': [ - 'screen_reader_tests.cc', - 'internal/live_region_test.cc', - 'internal/text_alternative_helper_test.cc', - ], - 'dependencies': [ - '<(DEPTH)/cobalt/accessibility/accessibility.gyp:accessibility', - '<(DEPTH)/cobalt/base/base.gyp:base', - '<(DEPTH)/cobalt/browser/browser.gyp:browser', - '<(DEPTH)/cobalt/test/test.gyp:run_all_unittests', - '<(DEPTH)/testing/gmock.gyp:gmock', - '<(DEPTH)/testing/gtest.gyp:gtest', - 'accessibility_test_data', - ], - }, - { - 'target_name': 'accessibility_test_data', - 'type': 'none', - 'variables': { - 'content_test_input_files': [ - '<(DEPTH)/cobalt/accessibility/testdata/', - ], - 'content_test_output_subdir': 'cobalt/accessibility/testdata/', - }, - 'includes': ['<(DEPTH)/starboard/build/copy_test_data.gypi'], - }, - { - 'target_name': 'accessibility_test_deploy', - 'type': 'none', - 'dependencies': [ - 'accessibility_test', - ], - 'variables': { - 'executable_name': 'accessibility_test', - }, - 'includes': [ '<(DEPTH)/starboard/build/deploy.gypi' ], - }, - ] -}
diff --git a/src/cobalt/accessibility/internal/live_region.cc b/src/cobalt/accessibility/internal/live_region.cc deleted file mode 100644 index 40407be..0000000 --- a/src/cobalt/accessibility/internal/live_region.cc +++ /dev/null
@@ -1,130 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/accessibility/internal/live_region.h" - -#include <bitset> -#include <memory> -#include <vector> - -#include "base/basictypes.h" -#include "base/memory/ptr_util.h" -#include "base/strings/string_split.h" -#include "cobalt/base/tokens.h" -#include "cobalt/dom/element.h" - -namespace cobalt { -namespace accessibility { -namespace internal { -namespace { -typedef std::bitset<8> RelevantMutationsBitset; - -// Default value for the aria-relevant property per the spec. -// https://www.w3.org/TR/wai-aria/states_and_properties#aria-relevant -const char kDefaultAriaRelevantValue[] = "additions text"; - -bool HasValidLiveRegionProperty(const scoped_refptr<dom::Element>& element) { - std::string aria_live_attribute = - element->GetAttribute(base::Tokens::aria_live().c_str()).value_or(""); - - return aria_live_attribute == base::Tokens::assertive() || - aria_live_attribute == base::Tokens::polite(); -} - -RelevantMutationsBitset GetRelevantMutations( - const scoped_refptr<dom::Element>& element) { - RelevantMutationsBitset bitset; - - std::string aria_relevant_attribute = - element->GetAttribute(base::Tokens::aria_relevant().c_str()) - .value_or(kDefaultAriaRelevantValue); - std::vector<std::string> tokens = - base::SplitString(aria_relevant_attribute, base::kWhitespaceASCII, - base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - for (size_t i = 0; i < tokens.size(); ++i) { - if (tokens[i] == base::Tokens::additions()) { - bitset.set(LiveRegion::kMutationTypeAddition); - } else if (tokens[i] == base::Tokens::removals()) { - bitset.set(LiveRegion::kMutationTypeRemoval); - } else if (tokens[i] == base::Tokens::text()) { - bitset.set(LiveRegion::kMutationTypeText); - } else if (tokens[i] == base::Tokens::all()) { - bitset.set(); - } else { - DLOG(WARNING) << "Unexpected value for aria-relevant attribute: " - << tokens[i]; - } - } - return bitset; -} -} // namespace - -// static -std::unique_ptr<LiveRegion> LiveRegion::GetLiveRegionForNode( - const scoped_refptr<dom::Node>& node) { - if (!node) { - return std::unique_ptr<LiveRegion>(nullptr); - } - scoped_refptr<dom::Element> element = node->AsElement(); - if (element && HasValidLiveRegionProperty(element)) { - return base::WrapUnique(new LiveRegion(element)); - } - return GetLiveRegionForNode(node->parent_node()); -} - -bool LiveRegion::IsAssertive() const { - base::Optional<std::string> aria_live_attribute = - root_->GetAttribute(base::Tokens::aria_live().c_str()); - if (!aria_live_attribute) { - NOTREACHED(); - return false; - } - return *aria_live_attribute == base::Tokens::assertive(); -} - -bool LiveRegion::IsMutationRelevant(MutationType mutation_type) const { - RelevantMutationsBitset bitset = GetRelevantMutations(root_); - return bitset.test(mutation_type); -} - -bool LiveRegion::IsAtomic(const scoped_refptr<dom::Node>& node) const { - // Stop searching if we go past the live region's root node. The default is - // non-atomic. - if (!node || node == root_->parent_node()) { - return false; - } - if (node->IsElement()) { - scoped_refptr<dom::Element> element = node->AsElement(); - // Search ancestors of the changed element to determine if this change is - // atomic or not, per the algorithm described in the spec. - // https://www.w3.org/TR/wai-aria/states_and_properties#aria-atomic - base::Optional<std::string> aria_atomic_attribute = - element->GetAttribute(base::Tokens::aria_atomic().c_str()); - if (aria_atomic_attribute) { - if (*aria_atomic_attribute == base::Tokens::true_token()) { - return true; - } else if (*aria_atomic_attribute == base::Tokens::false_token()) { - return false; - } else { - DLOG(WARNING) << "Unexpected token for aria-atomic: " - << *aria_atomic_attribute; - } - } - } - return IsAtomic(node->parent_node()); -} - -} // namespace internal -} // namespace accessibility -} // namespace cobalt
diff --git a/src/cobalt/accessibility/internal/live_region.h b/src/cobalt/accessibility/internal/live_region.h deleted file mode 100644 index 7a995ac..0000000 --- a/src/cobalt/accessibility/internal/live_region.h +++ /dev/null
@@ -1,82 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_ACCESSIBILITY_INTERNAL_LIVE_REGION_H_ -#define COBALT_ACCESSIBILITY_INTERNAL_LIVE_REGION_H_ - -#include <memory> -#include <string> - -#include "cobalt/dom/node.h" - -namespace cobalt { -namespace accessibility { -namespace internal { -// Collection of functions to support the implementation of wai-aria Live -// Regions: -// https://www.w3.org/TR/2010/WD-wai-aria-20100916/terms#def_liveregion -class LiveRegion { - public: - // Types of mutation to the DOM subtree that might cause a live region to be - // updated, corresponding to the possible values of aria-relevant as - // described in: - // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-relevant - enum MutationType { - kMutationTypeAddition = 1, // corresponds to "additions" - kMutationTypeRemoval, // corresponds to "removals" - kMutationTypeText, // corresponds to "text" - }; - - // Returns a LiveRegion instance describing the live region that this element - // is a member of, or NULL if this element is not part of a live region. - // - // Searches the element's ancestors looking for the first element with a - // valid aria-live attribute. - static std::unique_ptr<LiveRegion> GetLiveRegionForNode( - const scoped_refptr<dom::Node>& node); - - // Returns true if the value of aria-live is "assertive". - // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-live - bool IsAssertive() const; - - // Returns true if this live region should be updated in response to the - // specified type of change, based on the value of this element's - // aria-relevant property. - // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-relevant - bool IsMutationRelevant(MutationType mutation_type) const; - - // Returns true if changes to this node should result in an atomic update - // to its live region, according to the value of the aria-atomic property set - // on this node or its ancestors, up to and including the live region root. - // - // https://www.w3.org/TR/2011/CR-wai-aria-20110118/states_and_properties#aria-atomic - bool IsAtomic(const scoped_refptr<dom::Node>& node) const; - - // Returns the root of the live region (i.e.) the element that has the - // aria-live property set on it. - const scoped_refptr<dom::Element>& root() { return root_; } - - private: - explicit LiveRegion(const scoped_refptr<dom::Element>& root) : root_(root) {} - - // The root element of the live region. That is, the element with a valid - // aria-live attribute. - scoped_refptr<dom::Element> root_; -}; - -} // namespace internal -} // namespace accessibility -} // namespace cobalt - -#endif // COBALT_ACCESSIBILITY_INTERNAL_LIVE_REGION_H_
diff --git a/src/cobalt/accessibility/internal/live_region_test.cc b/src/cobalt/accessibility/internal/live_region_test.cc deleted file mode 100644 index 35e8b7f..0000000 --- a/src/cobalt/accessibility/internal/live_region_test.cc +++ /dev/null
@@ -1,235 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 <memory> - -#include "base/memory/ref_counted.h" -#include "cobalt/accessibility/internal/live_region.h" -#include "cobalt/dom/element.h" -#include "cobalt/test/empty_document.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace cobalt { -namespace accessibility { -namespace internal { -class LiveRegionTest : public ::testing::Test { - protected: - dom::Document* document() { return empty_document_.document(); } - - scoped_refptr<dom::Element> CreateLiveRegion(const char* type) { - scoped_refptr<dom::Element> live_region = document()->CreateElement("div"); - live_region->SetAttribute(base::Tokens::aria_live().c_str(), type); - return live_region; - } - - private: - // For posting tasks by any triggered code. - base::MessageLoop message_loop_; - test::EmptyDocument empty_document_; -}; - -TEST_F(LiveRegionTest, GetLiveRegionRoot) { - std::unique_ptr<LiveRegion> live_region; - - scoped_refptr<dom::Element> live_region_element = - CreateLiveRegion(base::Tokens::polite().c_str()); - ASSERT_TRUE(live_region_element); - - // GetLiveRegionForNode with the live region root. - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_EQ(live_region->root(), live_region_element); - - // GetLiveRegionForNode with a descendent node of a live region. - scoped_refptr<dom::Element> child = document()->CreateElement("div"); - live_region_element->AppendChild(child); - live_region = LiveRegion::GetLiveRegionForNode(child); - ASSERT_TRUE(live_region); - EXPECT_EQ(live_region->root(), live_region_element); - - // Element that is not in a live region. - scoped_refptr<dom::Element> not_live = document()->CreateElement("div"); - live_region = LiveRegion::GetLiveRegionForNode(not_live); - EXPECT_FALSE(live_region); -} - -TEST_F(LiveRegionTest, NestedLiveRegion) { - scoped_refptr<dom::Element> live_region_element = - CreateLiveRegion(base::Tokens::polite().c_str()); - ASSERT_TRUE(live_region_element); - - scoped_refptr<dom::Element> nested_region_element = - CreateLiveRegion(base::Tokens::polite().c_str()); - ASSERT_TRUE(nested_region_element); - live_region_element->AppendChild(nested_region_element); - - // The closest ancestor live region is this element's live region. - scoped_refptr<dom::Element> child = document()->CreateElement("div"); - nested_region_element->AppendChild(child); - std::unique_ptr<LiveRegion> live_region = - LiveRegion::GetLiveRegionForNode(child); - ASSERT_TRUE(live_region); - EXPECT_EQ(live_region->root(), nested_region_element); - - // Ignore live regions that are not active. - nested_region_element->SetAttribute(base::Tokens::aria_live().c_str(), - base::Tokens::off().c_str()); - live_region = LiveRegion::GetLiveRegionForNode(child); - ASSERT_TRUE(live_region); - EXPECT_EQ(live_region->root(), live_region_element); -} - -TEST_F(LiveRegionTest, LiveRegionType) { - std::unique_ptr<LiveRegion> live_region; - - // aria-live="polite" - scoped_refptr<dom::Element> polite_element = - CreateLiveRegion(base::Tokens::polite().c_str()); - ASSERT_TRUE(polite_element); - live_region = LiveRegion::GetLiveRegionForNode(polite_element); - ASSERT_TRUE(live_region); - EXPECT_FALSE(live_region->IsAssertive()); - - // aria-live="assertive" - scoped_refptr<dom::Element> assertive_element = - CreateLiveRegion(base::Tokens::assertive().c_str()); - ASSERT_TRUE(assertive_element); - live_region = LiveRegion::GetLiveRegionForNode(assertive_element); - ASSERT_TRUE(live_region); - EXPECT_TRUE(live_region->IsAssertive()); - - // aria-live="off" - scoped_refptr<dom::Element> off_element = - CreateLiveRegion(base::Tokens::off().c_str()); - ASSERT_TRUE(off_element); - live_region = LiveRegion::GetLiveRegionForNode(off_element); - EXPECT_FALSE(live_region); - - // aria-live=<invalid token> - scoped_refptr<dom::Element> invalid_element = CreateLiveRegion("banana"); - ASSERT_TRUE(invalid_element); - live_region = LiveRegion::GetLiveRegionForNode(invalid_element); - EXPECT_FALSE(live_region); -} - -TEST_F(LiveRegionTest, IsMutationRelevant) { - scoped_refptr<dom::Element> live_region_element = - CreateLiveRegion(base::Tokens::polite().c_str()); - ASSERT_TRUE(live_region_element); - - // GetLiveRegionForNode with the live region root. - std::unique_ptr<LiveRegion> live_region = - LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - // Default is that additions and text are relevant. - EXPECT_TRUE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition)); - EXPECT_TRUE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText)); - EXPECT_FALSE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval)); - - // Only removals are relevant. - live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(), - "removals"); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_FALSE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition)); - EXPECT_FALSE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText)); - EXPECT_TRUE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval)); - - // Removals and additions are relevant. - live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(), - "removals additions"); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_TRUE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition)); - EXPECT_FALSE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText)); - EXPECT_TRUE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval)); - - // An invalid token. - live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(), - "text dog additions"); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_TRUE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition)); - EXPECT_TRUE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText)); - EXPECT_FALSE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval)); - - // "all" token. - live_region_element->SetAttribute(base::Tokens::aria_relevant().c_str(), - "all"); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_TRUE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeAddition)); - EXPECT_TRUE(live_region->IsMutationRelevant(LiveRegion::kMutationTypeText)); - EXPECT_TRUE( - live_region->IsMutationRelevant(LiveRegion::kMutationTypeRemoval)); -} - -TEST_F(LiveRegionTest, IsAtomic) { - std::unique_ptr<LiveRegion> live_region; - - scoped_refptr<dom::Element> live_region_element = - CreateLiveRegion(base::Tokens::polite().c_str()); - ASSERT_TRUE(live_region_element); - - // Default is non-atomic. - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_FALSE(live_region->IsAtomic(live_region_element)); - - // aria-atomic=true - live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(), - "true"); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_TRUE(live_region->IsAtomic(live_region_element)); - - // aria-atomic=false - live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(), - "false"); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_FALSE(live_region->IsAtomic(live_region_element)); - - // Get the value of aria-atomic from ancestor elements. - live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(), - "true"); - scoped_refptr<dom::Element> child = document()->CreateElement("div"); - live_region_element->AppendChild(child); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_TRUE(live_region->IsAtomic(child)); - EXPECT_TRUE(live_region->IsAtomic(live_region_element)); - - // Stop checking ancestors on the first aria-atomic attribute. - live_region_element->SetAttribute(base::Tokens::aria_atomic().c_str(), - "true"); - child->SetAttribute(base::Tokens::aria_atomic().c_str(), "false"); - live_region = LiveRegion::GetLiveRegionForNode(live_region_element); - ASSERT_TRUE(live_region); - EXPECT_FALSE(live_region->IsAtomic(child)); - EXPECT_TRUE(live_region->IsAtomic(live_region_element)); -} -} // namespace internal -} // namespace accessibility -} // namespace cobalt
diff --git a/src/cobalt/accessibility/internal/text_alternative_helper.cc b/src/cobalt/accessibility/internal/text_alternative_helper.cc deleted file mode 100644 index f0b543b..0000000 --- a/src/cobalt/accessibility/internal/text_alternative_helper.cc +++ /dev/null
@@ -1,282 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/accessibility/internal/text_alternative_helper.h" - -#include <utility> - -#include "base/strings/string_split.h" -#include "cobalt/dom/document.h" -#include "cobalt/dom/html_element.h" -#include "cobalt/dom/html_image_element.h" -#include "cobalt/dom/node_list.h" - -namespace cobalt { -namespace accessibility { -namespace internal { -namespace { -// Helper class that inserts a base::Token into a base::hash_set during the -// class's lifetime. -class ScopedIdSetMember { - public: - // Adds |token| into |hash_set| for the duration of this class instance's - // lifetime. If |token| is an empty string, it doesn't get added to the set. - // - // TextAlternativeHelper::visited_element_ids_ is used to keep track of a set - // of element ids that have been visited during the current computation to - // ensure that we do not follow any ID reference loops. When - // AppendTextAlternative is called, the ID of that element is pushed into the - // set using this helper class, so that the ID will be popped back out of the - // set which allows us to re-visit that element in a non-recursive manner, if - // necessary. - ScopedIdSetMember(base::hash_set<base::Token>* hash_set, - const base::Token& token) - : hash_set_(hash_set) { - // Ignore empty tokens. - if (SbStringGetLength(token.c_str()) > 0) { - DCHECK(hash_set_->find(token) == hash_set_->end()); - iterator_pair_ = hash_set_->insert(token); - DCHECK(iterator_pair_.second); - } else { - // Ensure iterator_pair_ is initialized. - iterator_pair_ = std::make_pair(hash_set_->end(), false); - } - } - ~ScopedIdSetMember() { - if (iterator_pair_.second) { - hash_set_->erase(iterator_pair_.first); - } - } - - private: - base::hash_set<base::Token>* hash_set_; - std::pair<base::hash_set<base::Token>::iterator, bool> iterator_pair_; -}; - -// Look up an element whose id is |id| in the document that |element| is in. -scoped_refptr<dom::Element> GetElementById( - const scoped_refptr<dom::Element>& element, const std::string& id) { - // TODO: If referenced elements tend to be close to the referencing element, - // it may be more efficient to do a breadth-first search starting from - // |element|. - dom::Document* document = element->node_document(); - scoped_refptr<dom::Element> target_element = document->GetElementById(id); - DLOG_IF(WARNING, !target_element) - << "Could not find aria-labelledby target: " << id; - return target_element; -} -} // namespace - -void TextAlternativeHelper::AppendTextAlternative( - const scoped_refptr<dom::Node>& node) { - DCHECK(node); - // https://www.w3.org/TR/2014/REC-wai-aria-implementation-20140320/#mapping_additional_nd_te - // 5.6.1.3. Text Alternative Computation - - if (node->IsText()) { - // Rule 3D - // Get the contents of the text node. - if (node->text_content()) { - AppendTextIfNonEmpty(*node->text_content()); - } - return; - } - - scoped_refptr<dom::Element> element = node->AsElement(); - if (!element) { - // Since this is neither a Text or Element, ignore it. - return; - } - - if (visited_element_ids_.find(element->id()) != visited_element_ids_.end()) { - DLOG(INFO) << "Skipping element to prevent reference loop: " - << element->id(); - return; - } - - ScopedIdSetMember scoped_id_set_member(&visited_element_ids_, element->id()); - - // Rule 1 - // Skip hidden elements unless the author specifies to use them via an - // aria-labelledby or aria-describedby being used in the current computation. - if (!in_labelled_by_or_described_by_ && IsAriaHidden(element)) { - return; - } - - // Rule 2A (first bullet point) - // The aria-labelledby attribute takes precedence as the element's text - // alternative unless this computation is already occurring as the result of a - // recursive aria-labelledby declaration. - if (!in_labelled_by_or_described_by_) { - if (TryAppendFromLabelledByOrDescribedBy(element, - base::Tokens::aria_labelledby())) { - return; - } - } - - // Rule 2A (second bullet point) - // If aria-labelledby is empty or undefined, the aria-label attribute, which - // defines an explicit text string, is used. However, if this computation is - // already occurring as the result of a recursive text alternative computation - // and the current element is an embedded control as defined in rule 2B, - // ignore the aria-label attribute and skip directly to rule 2B. - // - // Note: Cobalt doesn't support the embedded controls defined in rule 2B, so - // just get the alternative text from the label, if it exists. - if (TryAppendFromLabel(element)) { - return; - } - - // Rule 2A (third bullet point) - // If aria-labelledby and aria-label are both empty or undefined, and if the - // element is not marked as presentational (role="presentation", check for the - // presence of an equivalent host language attribute or element for - // associating a label, and use those mechanisms to determine a text - // alternative. For example, in HTML, the img element's alt attribute defines - // a label string and the label element references the form element it labels. - // - // This implementation does not support the "role" attribute, so just get the - // "alt" property, if this is an element that supports it - if (TryAppendFromAltProperty(element)) { - return; - } - - // Rule 2B - // Cobalt does not support the controls described in this step, so skip it. - - // Rule 2C - // Otherwise, if the attributes checked in rules A and B didn't provide - // results, text is collected from descendant content if the current element's - // role allows "Name From: contents." The text alternatives for child nodes - // will be concatenated, using this same set of rules. This same rule may - // apply to a child, which means the computation becomes recursive and can - // result in text being collected in all the nodes in this subtree, no matter - // how deep they are. However, any given descendant subtree may instead - // collect their part of the text alternative from the preferred markup - // described in A and B above. These author-specified attributes are assumed - // to provide the correct text alternative for the entire subtree. All in all, - // the node rules are applied consistently as text alternatives are collected - // from descendants, and each containing element in those descendants may or - // may not allow their contents to be used. Each node in the subtree is - // consulted only once. If text has been collected from a child node, and is - // referenced by another IDREF in some descendant node, then that second, or - // subsequent, reference is not followed. This is done to avoid infinite - // loops. - // - // The "role" attribute is not supported, so ignore it. Recurse through - // children and concatenate text alternatives. - scoped_refptr<dom::NodeList> children = element->child_nodes(); - for (int i = 0; i < children->length(); ++i) { - scoped_refptr<dom::Node> child = children->Item(i); - AppendTextAlternative(child); - } - - // 5.6.1.2. Description Compution - // If aria-describedby is present, user agents MUST compute the accessible - // description by concatenating the text alternatives for nodes referenced by - // an aria-describedby attribute on the current node. The text alternatives - // for the referenced nodes are computed using a number of methods. - if (!in_labelled_by_or_described_by_) { - TryAppendFromLabelledByOrDescribedBy(element, - base::Tokens::aria_describedby()); - } -} - -std::string TextAlternativeHelper::GetTextAlternative() { - return base::JoinString(alternatives_, " "); -} - -bool TextAlternativeHelper::IsAriaHidden( - const scoped_refptr<dom::Element>& element) { - if (!element) { - return false; - } - base::Optional<std::string> aria_hidden_attribute = - element->GetAttribute(base::Tokens::aria_hidden().c_str()); - if (aria_hidden_attribute.value_or("") == base::Tokens::true_token()) { - return true; - } - return IsAriaHidden(element->parent_element()); -} - -bool TextAlternativeHelper::TryAppendFromLabelledByOrDescribedBy( - const scoped_refptr<dom::Element>& element, const base::Token& token) { - DCHECK(!in_labelled_by_or_described_by_); - base::Optional<std::string> attributes = element->GetAttribute(token.c_str()); - // If aria-labelledby is empty or undefined, the aria-label attribute ... is - // used (defined below). - std::vector<std::string> ids = - base::SplitString(attributes.value_or(""), base::kWhitespaceASCII, - base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY); - const size_t current_num_alternatives = alternatives_.size(); - if (!ids.empty()) { - in_labelled_by_or_described_by_ = true; - for (int i = 0; i < ids.size(); ++i) { - if (visited_element_ids_.find(base::Token(ids[i])) != - visited_element_ids_.end()) { - DLOG(WARNING) << "Skipping reference to ID: " << ids[i] - << " to prevent reference loop."; - continue; - } - scoped_refptr<dom::Element> target_element = - GetElementById(element, ids[i]); - if (!target_element) { - DLOG(WARNING) << "Could not find " << token.c_str() - << " target: " << ids[i]; - continue; - } - AppendTextAlternative(target_element); - } - in_labelled_by_or_described_by_ = false; - } - // Check if any of these recursive calls to AppendTextAlternative actually - // ended up appending something. - return current_num_alternatives != alternatives_.size(); -} - -bool TextAlternativeHelper::TryAppendFromLabel( - const scoped_refptr<dom::Element>& element) { - base::Optional<std::string> label_attribute = - element->GetAttribute(base::Tokens::aria_label().c_str()); - return AppendTextIfNonEmpty(label_attribute.value_or("")); -} - -bool TextAlternativeHelper::TryAppendFromAltProperty( - const scoped_refptr<dom::Element>& element) { - // https://www.w3.org/TR/REC-html40/struct/objects.html#h-13.8 - // The only element type that supports the "alt" attribute that Cobalt - // implements is the <img> element. - if (element->AsHTMLElement() && - element->AsHTMLElement()->AsHTMLImageElement()) { - base::Optional<std::string> alt_attribute = - element->GetAttribute(base::Tokens::alt().c_str()); - if (alt_attribute) { - return AppendTextIfNonEmpty(*alt_attribute); - } - } - return false; -} - -bool TextAlternativeHelper::AppendTextIfNonEmpty(const std::string& text) { - std::string trimmed; - TrimWhitespaceASCII(text, base::TRIM_ALL, &trimmed); - if (!trimmed.empty()) { - alternatives_.push_back(trimmed); - } - return !trimmed.empty(); -} - -} // namespace internal -} // namespace accessibility -} // namespace cobalt
diff --git a/src/cobalt/accessibility/internal/text_alternative_helper.h b/src/cobalt/accessibility/internal/text_alternative_helper.h deleted file mode 100644 index 760eef3..0000000 --- a/src/cobalt/accessibility/internal/text_alternative_helper.h +++ /dev/null
@@ -1,76 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_ACCESSIBILITY_INTERNAL_TEXT_ALTERNATIVE_HELPER_H_ -#define COBALT_ACCESSIBILITY_INTERNAL_TEXT_ALTERNATIVE_HELPER_H_ - -#include <string> -#include <vector> - -#include "base/containers/hash_tables.h" -#include "cobalt/base/token.h" -#include "cobalt/dom/element.h" -#include "cobalt/dom/node.h" - -namespace cobalt { -namespace accessibility { -namespace internal { - -// Helper class for implementing the WAI-ARIA Text Alternative computation -// algorithm, made public for testing. This class should not be used directly. -class TextAlternativeHelper { - public: - TextAlternativeHelper() : in_labelled_by_or_described_by_(false) {} - void AppendTextAlternative(const scoped_refptr<dom::Node>& node); - - // Return the accumulated alternatives joined by a single space character. - std::string GetTextAlternative(); - - // Append the text alternative from a aria-labelledby or aria-describedby - // property. Returns true if text alternative(s) were successfully appended. - bool TryAppendFromLabelledByOrDescribedBy( - const scoped_refptr<dom::Element>& element, const base::Token& token); - - // Append the text alternative from a aria-label property. Returns true - // if the aria-label property exists and has a non-empty value. - bool TryAppendFromLabel(const scoped_refptr<dom::Element>& element); - - // Append the text alternative from an element's "alt" property, for element - // types that support the semantics of the alt property. The only such element - // in Cobalt is <img> elements. - // Returns true if |element| is an element that supports the semantics of the - // "alt" property, and has a non-empty value for the "alt" property. - bool TryAppendFromAltProperty(const scoped_refptr<dom::Element>& element); - - // Append |text| to the accumulation of text alternative strings if it is not - // empty. Returns true if text is non-empty. - bool AppendTextIfNonEmpty(const std::string& text); - - // Returns true iff this element or one of its ancestors has the "aria-hidden" - // attribute set to "true". - static bool IsAriaHidden(const scoped_refptr<dom::Element>& element); - - private: - typedef base::hash_set<base::Token> TokenSet; - - bool in_labelled_by_or_described_by_; - std::vector<std::string> alternatives_; - TokenSet visited_element_ids_; -}; - -} // namespace internal -} // namespace accessibility -} // namespace cobalt - -#endif // COBALT_ACCESSIBILITY_INTERNAL_TEXT_ALTERNATIVE_HELPER_H_
diff --git a/src/cobalt/accessibility/internal/text_alternative_helper_test.cc b/src/cobalt/accessibility/internal/text_alternative_helper_test.cc deleted file mode 100644 index 1be481f..0000000 --- a/src/cobalt/accessibility/internal/text_alternative_helper_test.cc +++ /dev/null
@@ -1,339 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/accessibility/internal/text_alternative_helper.h" -#include "base/memory/ref_counted.h" -#include "cobalt/dom/html_image_element.h" -#include "cobalt/dom/text.h" -#include "cobalt/test/empty_document.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace cobalt { -namespace accessibility { -namespace internal { -class TextAlternativeHelperTest : public ::testing::Test { - protected: - dom::Document* document() { return empty_document_.document(); } - - TextAlternativeHelper text_alternative_helper_; - // For posting tasks by any triggered code. - base::MessageLoop message_loop_; - test::EmptyDocument empty_document_; -}; - -TEST_F(TextAlternativeHelperTest, ConcatenatesAlternatives) { - EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("test")); - EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("dog")); - EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("cat")); - EXPECT_STREQ("test dog cat", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, IgnoresEmptyStrings) { - EXPECT_FALSE(text_alternative_helper_.AppendTextIfNonEmpty("")); - EXPECT_STREQ("", text_alternative_helper_.GetTextAlternative().c_str()); - EXPECT_FALSE(text_alternative_helper_.AppendTextIfNonEmpty(" ")); - EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty()); -} - -TEST_F(TextAlternativeHelperTest, TrimsAlternatives) { - EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty(" test ")); - EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty("dog ")); - EXPECT_TRUE(text_alternative_helper_.AppendTextIfNonEmpty(" cat")); - EXPECT_STREQ("test dog cat", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, HiddenOnlyIfAriaHiddenSet) { - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - // No aria-hidden attribute set. - EXPECT_FALSE(TextAlternativeHelper::IsAriaHidden(element)); - - // aria-hidden attribute set to false. - element->SetAttribute(base::Tokens::aria_hidden().c_str(), - base::Tokens::false_token().c_str()); - EXPECT_FALSE(TextAlternativeHelper::IsAriaHidden(element)); - - // aria-hidden attribute set to true. - element->SetAttribute(base::Tokens::aria_hidden().c_str(), - base::Tokens::true_token().c_str()); - EXPECT_TRUE(TextAlternativeHelper::IsAriaHidden(element)); - - // aria-hidden set to some arbitrary value. - element->SetAttribute(base::Tokens::aria_hidden().c_str(), "banana"); - EXPECT_FALSE(TextAlternativeHelper::IsAriaHidden(element)); -} - -TEST_F(TextAlternativeHelperTest, GetTextAlternativeFromTextNode) { - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - element->AppendChild(document()->CreateTextNode("text node contents")); - text_alternative_helper_.AppendTextAlternative(element); - EXPECT_STREQ("text node contents", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, GetAltAttributeFromHTMLImage) { - scoped_refptr<dom::Element> element = - document()->CreateElement(dom::HTMLImageElement::kTagName); - element->SetAttribute(base::Tokens::alt().c_str(), "image alt text"); - EXPECT_TRUE(text_alternative_helper_.TryAppendFromAltProperty(element)); - EXPECT_STREQ("image alt text", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, EmptyAltAttribute) { - scoped_refptr<dom::Element> element = - document()->CreateElement(dom::HTMLImageElement::kTagName); - // No alt attribute. - EXPECT_FALSE(text_alternative_helper_.TryAppendFromAltProperty(element)); - EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty()); - - // Empty alt attribute. - element->SetAttribute(base::Tokens::alt().c_str(), ""); - EXPECT_FALSE(text_alternative_helper_.TryAppendFromAltProperty(element)); - EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty()); -} - -TEST_F(TextAlternativeHelperTest, AltAttributeOnArbitraryElement) { - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - element->SetAttribute(base::Tokens::alt().c_str(), "alt text"); - EXPECT_FALSE(text_alternative_helper_.TryAppendFromAltProperty(element)); - EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty()); -} - -TEST_F(TextAlternativeHelperTest, GetTextFromAriaLabel) { - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - element->SetAttribute(base::Tokens::aria_label().c_str(), "label text"); - EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabel(element)); - EXPECT_STREQ("label text", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, IgnoreEmptyAriaLabel) { - scoped_refptr<dom::Element> element = document()->CreateElement("test"); - element->SetAttribute(base::Tokens::aria_label().c_str(), " "); - EXPECT_FALSE(text_alternative_helper_.TryAppendFromLabel(element)); - EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty()); -} - -TEST_F(TextAlternativeHelperTest, GetTextFromAriaLabelledBy) { - scoped_refptr<dom::Element> target_element = document()->CreateElement("div"); - target_element->AppendChild(document()->CreateTextNode("labelledby target")); - target_element->set_id("target_element"); - document()->AppendChild(target_element); - - scoped_refptr<dom::Element> labelledby_element = - document()->CreateElement("div"); - labelledby_element->SetAttribute(base::Tokens::aria_labelledby().c_str(), - "target_element"); - document()->AppendChild(labelledby_element); - - EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy( - labelledby_element, base::Tokens::aria_labelledby())); - EXPECT_STREQ("labelledby target", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, InvalidLabelledByReference) { - scoped_refptr<dom::Element> target_element = document()->CreateElement("div"); - target_element->AppendChild(document()->CreateTextNode("labelledby target")); - target_element->set_id("target_element"); - document()->AppendChild(target_element); - - scoped_refptr<dom::Element> labelledby_element = - document()->CreateElement("div"); - labelledby_element->SetAttribute(base::Tokens::aria_labelledby().c_str(), - "bad_reference"); - document()->AppendChild(labelledby_element); - - EXPECT_FALSE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy( - labelledby_element, base::Tokens::aria_labelledby())); - EXPECT_TRUE(text_alternative_helper_.GetTextAlternative().empty()); -} - -TEST_F(TextAlternativeHelperTest, MultipleLabelledByReferences) { - scoped_refptr<dom::Element> target_element = document()->CreateElement("div"); - target_element->AppendChild(document()->CreateTextNode("target1")); - target_element->set_id("target_element1"); - document()->AppendChild(target_element); - target_element = document()->CreateElement("div"); - target_element->AppendChild(document()->CreateTextNode("target2")); - target_element->set_id("target_element2"); - document()->AppendChild(target_element); - target_element = document()->CreateElement("div"); - target_element->AppendChild(document()->CreateTextNode("target3")); - target_element->set_id("target_element3"); - document()->AppendChild(target_element); - - scoped_refptr<dom::Element> labelledby_element = - document()->CreateElement("div"); - labelledby_element->SetAttribute( - base::Tokens::aria_labelledby().c_str(), - "target_element1 target_element2 bad_reference target_element3"); - document()->AppendChild(labelledby_element); - - EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy( - labelledby_element, base::Tokens::aria_labelledby())); - EXPECT_STREQ("target1 target2 target3", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, LabelledByReferencesSelf) { - scoped_refptr<dom::Element> target_element = document()->CreateElement("div"); - target_element->AppendChild(document()->CreateTextNode("other-text")); - target_element->set_id("other_id"); - document()->AppendChild(target_element); - - scoped_refptr<dom::Element> labelledby_element = - document()->CreateElement("div"); - labelledby_element->set_id("self_id"); - labelledby_element->SetAttribute(base::Tokens::aria_label().c_str(), - "self-label"); - labelledby_element->SetAttribute(base::Tokens::aria_labelledby().c_str(), - "other_id self_id"); - document()->AppendChild(labelledby_element); - - EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy( - labelledby_element, base::Tokens::aria_labelledby())); - EXPECT_STREQ("other-text self-label", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, NoRecursiveLabelledBy) { - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - element->SetAttribute(base::Tokens::aria_labelledby().c_str(), - "first_labelled_by_id"); - document()->AppendChild(element); - - scoped_refptr<dom::Element> first_labelledby_element = - document()->CreateElement("div"); - first_labelledby_element->AppendChild( - document()->CreateTextNode("first-labelledby-text-contents")); - first_labelledby_element->set_id("first_labelled_by_id"); - first_labelledby_element->SetAttribute( - base::Tokens::aria_labelledby().c_str(), "second_labelled_by_id"); - document()->AppendChild(first_labelledby_element); - - scoped_refptr<dom::Element> second_labelledby_element = - document()->CreateElement("div"); - second_labelledby_element->AppendChild( - document()->CreateTextNode("second-labelledby-text-contents")); - second_labelledby_element->set_id("second_labelled_by_id"); - document()->AppendChild(second_labelledby_element); - - // In the non-recursive case, we should follow the labelledby attribute. - text_alternative_helper_.AppendTextAlternative(first_labelledby_element); - EXPECT_STREQ("second-labelledby-text-contents", - text_alternative_helper_.GetTextAlternative().c_str()); - - // In the recursive case, we should not follow the second labelledby - // attribute. - text_alternative_helper_ = TextAlternativeHelper(); - text_alternative_helper_.AppendTextAlternative(element); - EXPECT_STREQ("first-labelledby-text-contents", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, GetTextFromSubtree) { - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - document()->AppendChild(element); - - scoped_refptr<dom::Element> child = document()->CreateElement("div"); - child->AppendChild(document()->CreateTextNode("child1-text")); - element->AppendChild(child); - - scoped_refptr<dom::Element> child_element = document()->CreateElement("div"); - element->AppendChild(child_element); - - child = document()->CreateElement("div"); - child->AppendChild(document()->CreateTextNode("child2-text")); - child_element->AppendChild(child); - - child = document()->CreateElement("div"); - child->AppendChild(document()->CreateTextNode("child3-text")); - child_element->AppendChild(child); - - text_alternative_helper_.AppendTextAlternative(element); - EXPECT_STREQ("child1-text child2-text child3-text", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, DontFollowReferenceLoops) { - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - element->set_id("root_element_id"); - document()->AppendChild(element); - - scoped_refptr<dom::Element> child_element1 = document()->CreateElement("div"); - child_element1->SetAttribute(base::Tokens::aria_labelledby().c_str(), - "root_element_id"); - element->AppendChild(child_element1); - - scoped_refptr<dom::Element> child_element2 = document()->CreateElement("div"); - child_element1->AppendChild(child_element2); - - child_element2->AppendChild(document()->CreateTextNode("child2-text")); - - text_alternative_helper_.AppendTextAlternative(element); - EXPECT_STREQ("child2-text", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, GetTextFromAriaDescribedBy) { - scoped_refptr<dom::Element> target_element = document()->CreateElement("div"); - target_element->AppendChild(document()->CreateTextNode("describedby target")); - target_element->set_id("target_element"); - document()->AppendChild(target_element); - - scoped_refptr<dom::Element> describedby_element = - document()->CreateElement("div"); - describedby_element->SetAttribute(base::Tokens::aria_describedby().c_str(), - "target_element"); - document()->AppendChild(describedby_element); - - EXPECT_TRUE(text_alternative_helper_.TryAppendFromLabelledByOrDescribedBy( - describedby_element, base::Tokens::aria_describedby())); - EXPECT_STREQ("describedby target", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -TEST_F(TextAlternativeHelperTest, HasBothLabelledByAndDescribedBy) { - // aria-describedby is ignored in this case. - scoped_refptr<dom::Element> element = document()->CreateElement("div"); - document()->AppendChild(element); - - element->SetAttribute(base::Tokens::aria_labelledby().c_str(), "calendar"); - element->SetAttribute(base::Tokens::aria_describedby().c_str(), "info"); - - scoped_refptr<dom::Element> labelledby_element = - document()->CreateElement("div"); - labelledby_element->set_id("calendar"); - labelledby_element->AppendChild(document()->CreateTextNode("Calendar")); - element->AppendChild(labelledby_element); - - scoped_refptr<dom::Element> describedby_element = - document()->CreateElement("div"); - describedby_element->set_id("info"); - describedby_element->AppendChild( - document()->CreateTextNode("Calendar content description.")); - element->AppendChild(describedby_element); - - text_alternative_helper_.AppendTextAlternative(element); - EXPECT_STREQ("Calendar", - text_alternative_helper_.GetTextAlternative().c_str()); -} - -} // namespace internal -} // namespace accessibility -} // namespace cobalt
diff --git a/src/cobalt/accessibility/screen_reader.cc b/src/cobalt/accessibility/screen_reader.cc deleted file mode 100644 index 6e313b8..0000000 --- a/src/cobalt/accessibility/screen_reader.cc +++ /dev/null
@@ -1,181 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/accessibility/screen_reader.h" - -#include <memory> -#include <string> - -#include "base/strings/stringprintf.h" -#include "cobalt/accessibility/internal/live_region.h" -#include "cobalt/accessibility/text_alternative.h" -#include "cobalt/dom/element.h" -#include "cobalt/dom/html_body_element.h" -#include "cobalt/dom/node_list.h" - -namespace cobalt { -namespace accessibility { -namespace { -// When text is removed from a live region, add the word "Removed" to indicate -// that the text has been removed. -// TODO: Support other languages. -const char kRemovedFormatString[] = "Removed. %s"; -} // namespace - -ScreenReader::ScreenReader(dom::Document* document, TTSEngine* tts_engine, - dom::MutationObserverTaskManager* task_manager) - : enabled_(true), - document_(document), - tts_engine_(tts_engine), - focus_changed_(false) { - DCHECK(document_ && tts_engine_); - document_->AddObserver(this); - live_region_observer_ = new dom::MutationObserver( - base::Bind(&ScreenReader::MutationObserverCallback, AsWeakPtr()), - task_manager); -} - -ScreenReader::~ScreenReader() { - live_region_observer_->Disconnect(); - document_->RemoveObserver(this); -} - -void ScreenReader::set_enabled(bool value) { enabled_ = value; } - -void ScreenReader::OnLoad() { - dom::MutationObserverInit init; - init.set_subtree(true); - // Track character data and node addition/removal for live regions. - init.set_character_data(true); - init.set_child_list(true); - - if (document_->body()) { - live_region_observer_->Observe(document_->body(), init); - } -} - -void ScreenReader::OnFocusChanged() { - if (focus_changed_) { - return; - } - focus_changed_ = true; - base::MessageLoop::current()->task_runner()->PostTask( - FROM_HERE, base::Bind(&ScreenReader::FocusChangedCallback, AsWeakPtr())); -} - -void ScreenReader::FocusChangedCallback() { - focus_changed_ = false; - if (!enabled_) { - return; - } - scoped_refptr<dom::Element> element = document_->active_element(); - if (element) { - std::string text_alternative = ComputeTextAlternative(element); - tts_engine_->SpeakNow(text_alternative); - } -} - -// MutationObserver callback for tracking the creation and destruction of -// live regions. -void ScreenReader::MutationObserverCallback( - const MutationRecordSequence& sequence, - const scoped_refptr<dom::MutationObserver>& observer) { - // TODO: Only check live regions if text-to-speech is enabled. - if (!enabled_) { - return; - } - DCHECK_EQ(observer, live_region_observer_); - for (size_t i = 0; i < sequence.size(); ++i) { - scoped_refptr<dom::MutationRecord> record = sequence.at(i); - - // Check if the target node is part of a live region. - std::unique_ptr<internal::LiveRegion> live_region = - internal::LiveRegion::GetLiveRegionForNode(record->target()); - if (!live_region) { - continue; - } - - const char* format_string = NULL; - // Get a list of changed nodes, based on the type of change this was and - // whether or not the live region cares about this type of change. - scoped_refptr<dom::NodeList> changed_nodes; - if (record->type() == base::Tokens::characterData() && - live_region->IsMutationRelevant( - internal::LiveRegion::kMutationTypeText)) { - changed_nodes = new dom::NodeList(); - changed_nodes->AppendNode(record->target()); - } else if (record->type() == base::Tokens::childList()) { - if (record->added_nodes() && - live_region->IsMutationRelevant( - internal::LiveRegion::kMutationTypeAddition)) { - changed_nodes = record->added_nodes(); - } - if (record->removed_nodes() && - live_region->IsMutationRelevant( - internal::LiveRegion::kMutationTypeRemoval)) { - changed_nodes = record->removed_nodes(); - format_string = kRemovedFormatString; - } - } - // If we don't have changed nodes, that means that the change was not - // relevant to this live region. - if (!changed_nodes || (changed_nodes->length() <= 0)) { - continue; - } - - // Check if any of the changed nodes should update the live region - // atomically. - bool is_atomic = false; - for (size_t i = 0; i < changed_nodes->length(); ++i) { - if (live_region->IsAtomic(changed_nodes->Item(i))) { - is_atomic = true; - break; - } - } - - std::string text_alternative; - if (is_atomic) { - // If the live region updates atomically, then ignore changed_nodes - // and just get the text alternative from the entire region. - text_alternative = ComputeTextAlternative(live_region->root()); - } else { - // Otherwise append all the text alternatives for each node. - for (size_t i = 0; i < changed_nodes->length(); ++i) { - text_alternative += ComputeTextAlternative(changed_nodes->Item(i)); - } - } - - // If we still don't have a text_alternative to speak, continue to the next - // mutation. - if (text_alternative.empty()) { - continue; - } - - // Provide additional context through a format string, if necessary. - if (format_string) { - text_alternative = - base::StringPrintf(format_string, text_alternative.c_str()); - } - - // Utter the text according to whether this live region is assertive or not. - if (live_region->IsAssertive()) { - tts_engine_->SpeakNow(text_alternative); - } else { - tts_engine_->Speak(text_alternative); - } - } -} - -} // namespace accessibility -} // namespace cobalt
diff --git a/src/cobalt/accessibility/screen_reader.h b/src/cobalt/accessibility/screen_reader.h deleted file mode 100644 index 83eb183..0000000 --- a/src/cobalt/accessibility/screen_reader.h +++ /dev/null
@@ -1,70 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_ACCESSIBILITY_SCREEN_READER_H_ -#define COBALT_ACCESSIBILITY_SCREEN_READER_H_ - -#include <memory> - -#include "base/memory/weak_ptr.h" -#include "cobalt/accessibility/tts_engine.h" -#include "cobalt/dom/document.h" -#include "cobalt/dom/mutation_observer.h" -#include "cobalt/dom/mutation_observer_task_manager.h" - -namespace cobalt { -namespace accessibility { -// ScreenReader tracks changes in the state of the Document and provides speech -// utterances to a TTSEngine. The main use cases covered are when the document's -// focused element changes, usually in response to user input, or if there is -// an asynchronous change to "live region" that should be communicated to the -// user. -class ScreenReader : public base::SupportsWeakPtr<ScreenReader>, - public dom::DocumentObserver { - public: - ScreenReader(dom::Document* document, TTSEngine* tts_engine, - dom::MutationObserverTaskManager* task_manager); - - void set_enabled(bool enabled); - bool enabled() const { return enabled_; } - - protected: - ~ScreenReader(); - // dom::DocumentObserver overrides. - void OnLoad() override; - void OnMutation() override {} - void OnFocusChanged() override; - - private: - typedef script::Sequence<scoped_refptr<dom::MutationRecord> > - MutationRecordSequence; - void FocusChangedCallback(); - // MutationObserver callback for tracking live regions. - void MutationObserverCallback( - const MutationRecordSequence& sequence, - const scoped_refptr<dom::MutationObserver>& observer); - - bool enabled_; - dom::Document* document_; - TTSEngine* tts_engine_; - scoped_refptr<dom::MutationObserver> live_region_observer_; - bool focus_changed_; - - friend std::unique_ptr<ScreenReader>::deleter_type; - DISALLOW_COPY_AND_ASSIGN(ScreenReader); -}; -} // namespace accessibility -} // namespace cobalt - -#endif // COBALT_ACCESSIBILITY_SCREEN_READER_H_
diff --git a/src/cobalt/accessibility/screen_reader_tests.cc b/src/cobalt/accessibility/screen_reader_tests.cc deleted file mode 100644 index 238c096..0000000 --- a/src/cobalt/accessibility/screen_reader_tests.cc +++ /dev/null
@@ -1,206 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 <memory> -#include <string> -#include <vector> - -#include "base/base_paths.h" -#include "base/files/file_enumerator.h" -#include "base/files/file_path.h" -#include "base/files/file_util.h" -#include "base/memory/ref_counted.h" -#include "base/path_service.h" -#include "cobalt/accessibility/screen_reader.h" -#include "cobalt/accessibility/text_alternative.h" -#include "cobalt/accessibility/tts_engine.h" -#include "cobalt/browser/web_module.h" -#include "cobalt/cssom/viewport_size.h" -#include "cobalt/dom/element.h" -#include "cobalt/dom/window.h" -#include "cobalt/test/document_loader.h" -#include "starboard/window.h" -#include "testing/gmock/include/gmock/gmock.h" -#include "testing/gtest/include/gtest/gtest.h" - -using cobalt::cssom::ViewportSize; -using testing::_; - -namespace cobalt { -namespace accessibility { -namespace { -struct TestInfo { - TestInfo(const std::string& html_file_name, - const std::string& expected_result, bool screen_reader_enabled) - : html_file_name(html_file_name), - expected_result(expected_result), - screen_reader_enabled(screen_reader_enabled) {} - std::string html_file_name; - std::string expected_result; - bool screen_reader_enabled; -}; - -// Enumerate the *.html files in the accessibility_test directory and build -// a list of input .html files and expected results. -std::vector<TestInfo> EnumerateTests(bool screen_reader_enabled, - const std::string& subdir) { - std::vector<TestInfo> infos; - base::FilePath root_directory; - base::PathService::Get(base::DIR_TEST_DATA, &root_directory); - root_directory = root_directory.Append("cobalt") - .Append("accessibility") - .Append("testdata") - .Append(subdir); - base::FileEnumerator enumerator(root_directory, false, - base::FileEnumerator::FILES); - for (base::FilePath html_file = enumerator.Next(); !html_file.empty(); - html_file = enumerator.Next()) { - if (html_file.Extension() == ".html") { - base::FilePath expected_results_file = - html_file.ReplaceExtension(".expected"); - std::string results; - if (!base::ReadFileToString(expected_results_file, &results)) { - DLOG(WARNING) << "Failed to read results from file: " - << expected_results_file.value(); - continue; - } - TrimWhitespaceASCII(results, base::TRIM_ALL, &results); - infos.push_back(TestInfo(html_file.BaseName().value(), results, - screen_reader_enabled)); - } - } - return infos; -} - -class MockTTSEngine : public TTSEngine { - public: - MOCK_METHOD1(Speak, void(const std::string&)); - MOCK_METHOD1(SpeakNow, void(const std::string&)); -}; - -class TextAlternativeTest : public ::testing::TestWithParam<TestInfo> { - protected: - // For posting tasks by any triggered code. - test::DocumentLoader document_loader_; -}; - -class LiveRegionMutationTest : public ::testing::TestWithParam<TestInfo> { - public: - LiveRegionMutationTest() - : quit_event_(base::WaitableEvent::ResetPolicy::MANUAL, - base::WaitableEvent::InitialState::NOT_SIGNALED) {} - void OnError(const GURL&, const std::string& error) { - DLOG(ERROR) << error; - Quit(); - } - void Quit() { - quit_event_.Signal(); - screen_reader_.reset(); - } - void OnClose(base::TimeDelta close_time) { - SB_UNREFERENCED_PARAMETER(close_time); - Quit(); - } - - scoped_refptr<script::Wrappable> CreateWindowAttribute( - const scoped_refptr<dom::Window>& window, - dom::MutationObserverTaskManager* mutation_observer_task_manager, - script::GlobalEnvironment* global_environment) { - SB_UNREFERENCED_PARAMETER(global_environment); - screen_reader_.reset(new accessibility::ScreenReader( - window->document(), &tts_engine_, mutation_observer_task_manager)); - screen_reader_->set_enabled(GetParam().screen_reader_enabled); - EXPECT_EQ(GetParam().screen_reader_enabled, screen_reader_->enabled()); - - return NULL; - } - - static void OnRenderTreeProducedStub( - const browser::WebModule::LayoutResults&) {} - - protected: - MockTTSEngine tts_engine_; - base::WaitableEvent quit_event_; - std::unique_ptr<accessibility::ScreenReader> screen_reader_; -}; -} // namespace - -TEST_P(TextAlternativeTest, TextAlternativeTest) { - GURL url( - std::string("file:///cobalt/accessibility/testdata/text_alternative/" + - GetParam().html_file_name)); - document_loader_.Load(url); - ASSERT_TRUE(document_loader_.document()); - scoped_refptr<dom::Element> element = - document_loader_.document()->GetElementById("element_to_test"); - ASSERT_TRUE(element); - EXPECT_EQ(GetParam().expected_result, ComputeTextAlternative(element)); -} - -// This test broke because LiveRegionMutationTest::CreateWindowAttribute() -// returns a NULL script::Wrappable, which the javascript engine will attempt -// to dereference. -TEST_P(LiveRegionMutationTest, DISABLED_LiveRegionMutationTest) { - GURL url(std::string("file:///cobalt/accessibility/testdata/live_region/" + - GetParam().html_file_name)); - const ViewportSize kDefaultViewportSize(1280, 720); - const float kDefaultVideoPixelRatio = 1.0f; - const float kRefreshRate = 60.0f; - - network::NetworkModule network_module((network::NetworkModule::Options())); - render_tree::ResourceProviderStub resource_provider; - - // Use test runner mode to allow the content itself to dictate when it is - // ready for layout should be performed. See cobalt/dom/test_runner.h. - browser::WebModule::Options web_module_options; - web_module_options.injected_window_attributes["test"] = base::Bind( - &LiveRegionMutationTest::CreateWindowAttribute, base::Unretained(this)); - - // Set expected result from mutation. - std::string expected_speech = GetParam().expected_result; - if (expected_speech.empty() || !GetParam().screen_reader_enabled) { - EXPECT_CALL(tts_engine_, Speak(_)).Times(0); - } else { - EXPECT_CALL(tts_engine_, Speak(expected_speech)); - } - - // Create the webmodule and let it run. - DLOG(INFO) << url.spec(); - browser::WebModule web_module( - url, base::kApplicationStateStarted, - base::Bind(&LiveRegionMutationTest::OnRenderTreeProducedStub), - base::Bind(&LiveRegionMutationTest::OnError, base::Unretained(this)), - base::Bind(&LiveRegionMutationTest::OnClose, base::Unretained(this)), - base::Closure(), /* window_minimize_callback */ - NULL /* can_play_type_handler */, NULL /* web_media_player_factory */, - &network_module, kDefaultViewportSize, kDefaultVideoPixelRatio, - &resource_provider, kRefreshRate, web_module_options); - - // Wait for the test to quit. - quit_event_.Wait(); -} - -INSTANTIATE_TEST_CASE_P( - TextAlternativeTest, TextAlternativeTest, - ::testing::ValuesIn(EnumerateTests(true, "text_alternative"))); - -INSTANTIATE_TEST_CASE_P(LiveRegionMutationTestEnabled, LiveRegionMutationTest, - ::testing::ValuesIn(EnumerateTests(true, - "live_region"))); - -INSTANTIATE_TEST_CASE_P(LiveRegionMutationTestDisabled, LiveRegionMutationTest, - ::testing::ValuesIn(EnumerateTests(false, - "live_region"))); -} // namespace accessibility -} // namespace cobalt
diff --git a/src/cobalt/accessibility/starboard_tts_engine.cc b/src/cobalt/accessibility/starboard_tts_engine.cc deleted file mode 100644 index c05afd4..0000000 --- a/src/cobalt/accessibility/starboard_tts_engine.cc +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/accessibility/starboard_tts_engine.h" - -#include "starboard/speech_synthesis.h" - -#if SB_HAS(SPEECH_SYNTHESIS) - -namespace cobalt { -namespace accessibility { - -void StarboardTTSEngine::SpeakNow(const std::string& text) { - SbSpeechSynthesisCancel(); - Speak(text); -} - -void StarboardTTSEngine::Speak(const std::string& text) { - SbSpeechSynthesisSpeak(text.c_str()); -} - -} // namespace accessibility -} // namespace cobalt - -#endif // SB_HAS(SPEECH_SYNTHESIS)
diff --git a/src/cobalt/accessibility/starboard_tts_engine.h b/src/cobalt/accessibility/starboard_tts_engine.h deleted file mode 100644 index 7eb8c50..0000000 --- a/src/cobalt/accessibility/starboard_tts_engine.h +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_ACCESSIBILITY_STARBOARD_TTS_ENGINE_H_ -#define COBALT_ACCESSIBILITY_STARBOARD_TTS_ENGINE_H_ - -#include <string> - -#include "base/compiler_specific.h" -#include "cobalt/accessibility/tts_engine.h" - -namespace cobalt { -namespace accessibility { - -// Implementation of TTSEngine using the Starboard Speech Synthesis API. -class StarboardTTSEngine : public TTSEngine { - public: - void SpeakNow(const std::string& text) override; - void Speak(const std::string& text) override; - ~StarboardTTSEngine() override {} -}; -} // namespace accessibility -} // namespace cobalt - -#endif // COBALT_ACCESSIBILITY_STARBOARD_TTS_ENGINE_H_
diff --git a/src/cobalt/accessibility/testdata/live_region/add-child.expected b/src/cobalt/accessibility/testdata/live_region/add-child.expected deleted file mode 100644 index 4706dc8..0000000 --- a/src/cobalt/accessibility/testdata/live_region/add-child.expected +++ /dev/null
@@ -1 +0,0 @@ -New child text contents
diff --git a/src/cobalt/accessibility/testdata/live_region/add-child.html b/src/cobalt/accessibility/testdata/live_region/add-child.html deleted file mode 100644 index c22f5d2..0000000 --- a/src/cobalt/accessibility/testdata/live_region/add-child.html +++ /dev/null
@@ -1,19 +0,0 @@ -<html> -<head> -<script> -var doMutation = function() { - var region = document.getElementById("to_mutate"); - var new_child = document.createElement("div"); - new_child.appendChild(document.createTextNode("New child text contents")); - region.appendChild(new_child); - window.setTimeout(function() { window.close(); } ); -} -window.addEventListener("load", doMutation); -</script> -</head> -<body> -<div id="to_mutate" aria-live="polite" aria-relevant="additions" aria-atomic="false"> - Original contents. -</div> -</body> -</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/atomic-update.expected b/src/cobalt/accessibility/testdata/live_region/atomic-update.expected deleted file mode 100644 index c4395db..0000000 --- a/src/cobalt/accessibility/testdata/live_region/atomic-update.expected +++ /dev/null
@@ -1 +0,0 @@ -Original contents. New child text contents
diff --git a/src/cobalt/accessibility/testdata/live_region/atomic-update.html b/src/cobalt/accessibility/testdata/live_region/atomic-update.html deleted file mode 100644 index 7e9a9cc..0000000 --- a/src/cobalt/accessibility/testdata/live_region/atomic-update.html +++ /dev/null
@@ -1,19 +0,0 @@ -<html> -<head> -<script> -var doMutation = function() { - var region = document.getElementById("to_mutate"); - var new_child = document.createElement("div"); - new_child.appendChild(document.createTextNode("New child text contents")); - region.appendChild(new_child); - window.setTimeout(function() { window.close(); } ); -} -window.addEventListener("load", doMutation); -</script> -</head> -<body> -<div id="to_mutate" aria-live="polite" aria-relevant="additions" aria-atomic="true"> - Original contents. -</div> -</body> -</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.expected b/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.expected deleted file mode 100644 index 8a1cd73..0000000 --- a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.expected +++ /dev/null
@@ -1 +0,0 @@ -New text contents
diff --git a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.html b/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.html deleted file mode 100644 index 53e5afe..0000000 --- a/src/cobalt/accessibility/testdata/live_region/mutate-text-contents.html +++ /dev/null
@@ -1,18 +0,0 @@ -<html> -<head> -<script> -var doMutation = function() { - var region = document.getElementById("to_mutate"); - region.firstChild.textContent = "New text contents"; - - window.setTimeout(function() { window.close(); } ); -} -window.addEventListener("load", doMutation); -</script> -</head> -<body> -<div id="to_mutate" aria-live="polite" aria-relevant="text" aria-atomic="false"> - Original contents. -</div> -</body> -</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.expected b/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.expected deleted file mode 100644 index e69de29..0000000 --- a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.expected +++ /dev/null
diff --git a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.html b/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.html deleted file mode 100644 index f315236..0000000 --- a/src/cobalt/accessibility/testdata/live_region/non-relevant-mutations.html +++ /dev/null
@@ -1,39 +0,0 @@ -<html> -<head> -<script> -var doMutation = function() { - var text_only_region = document.getElementById("text_only"); - var to_remove = document.getElementById("text_only_to_remove"); - text_only_region.removeChild(to_remove); - text_only_region.appendChild(document.createTextNode("Irrelevant")) - - var additions_only_region = document.getElementById("additions_only"); - to_remove = document.getElementById("additions_only_to_remove"); - additions_only_region.removeChild(to_remove); - - var to_mutate = document.getElementById("additions_only_to_mutate"); - to_mutate.firstChild.textContent = "New Content"; - - window.setTimeout(function() { window.close(); } ); -} -window.addEventListener("load", doMutation); -</script> -</head> -<body> -<div id="text_only" aria-live="polite" aria-relevant="text" aria-atomic="false"> - Some contents - <div id="text_only_to_remove"> - Contents to be removed - </div> -<div> -<div id="additions_only" aria-live="polite" aria-relevant="additions" aria-atomic="false"> - Some contents - <div id="additions_only_to_remove"> - Contents to be removed - </div> - <div id="additions_only_to_mutate"> - Old text contents - </div> -<div> -</body> -</html>
diff --git a/src/cobalt/accessibility/testdata/live_region/remove-child.expected b/src/cobalt/accessibility/testdata/live_region/remove-child.expected deleted file mode 100644 index c08dfdb..0000000 --- a/src/cobalt/accessibility/testdata/live_region/remove-child.expected +++ /dev/null
@@ -1 +0,0 @@ -Removed. Contents to be removed
diff --git a/src/cobalt/accessibility/testdata/live_region/remove-child.html b/src/cobalt/accessibility/testdata/live_region/remove-child.html deleted file mode 100644 index 40727ec..0000000 --- a/src/cobalt/accessibility/testdata/live_region/remove-child.html +++ /dev/null
@@ -1,21 +0,0 @@ -<html> -<head> -<script> -var doMutation = function() { - var region = document.getElementById("to_mutate"); - var to_remove = document.getElementById("to_remove"); - region.removeChild(to_remove); - window.setTimeout(function() { window.close(); } ); -} -window.addEventListener("load", doMutation); -</script> -</head> -<body> -<div id="to_mutate" aria-live="polite" aria-relevant="removals" aria-atomic="false"> - Some contents - <div id="to_remove"> - Contents to be removed - </div> -</div> -</body> -</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.expected b/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.expected deleted file mode 100644 index 8b13789..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.expected +++ /dev/null
@@ -1 +0,0 @@ -
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.html b/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.html deleted file mode 100644 index 7efd526..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/hidden-by-parent.html +++ /dev/null
@@ -1,7 +0,0 @@ -<html> - <div aria-hidden="true"> - <div id="element_to_test" > - This text shouldn't be used. - </div> - </div> -</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.expected b/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.expected deleted file mode 100644 index 78c1792..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.expected +++ /dev/null
@@ -1 +0,0 @@ -Hidden labelled by target.
diff --git a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.html b/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.html deleted file mode 100644 index 5294f75..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/hidden-labelledby.html +++ /dev/null
@@ -1,8 +0,0 @@ -<html> - <div id="element_to_test" aria-labelledby="hidden_target"/> - <div aria-hidden="true"> - <div id="hidden_target" > - Hidden labelled by target. - </div> - </div> -</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.expected b/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.expected deleted file mode 100644 index 32de814..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.expected +++ /dev/null
@@ -1 +0,0 @@ -The aria label
diff --git a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.html b/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.html deleted file mode 100644 index 6225503..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/self-reference-labelledby.html +++ /dev/null
@@ -1,4 +0,0 @@ -<html> - <div id="element_to_test" aria-label="The aria label" aria-labelledby="element_to_test"> - </div> -</html>
diff --git a/src/cobalt/accessibility/testdata/text_alternative/text-content.expected b/src/cobalt/accessibility/testdata/text_alternative/text-content.expected deleted file mode 100644 index 401745c..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/text-content.expected +++ /dev/null
@@ -1 +0,0 @@ -Use text content
diff --git a/src/cobalt/accessibility/testdata/text_alternative/text-content.html b/src/cobalt/accessibility/testdata/text_alternative/text-content.html deleted file mode 100644 index 000c8be..0000000 --- a/src/cobalt/accessibility/testdata/text_alternative/text-content.html +++ /dev/null
@@ -1,5 +0,0 @@ -<html> - <div id="element_to_test"> - Use text content - </div> -</html>
diff --git a/src/cobalt/accessibility/text_alternative.cc b/src/cobalt/accessibility/text_alternative.cc deleted file mode 100644 index c06731d..0000000 --- a/src/cobalt/accessibility/text_alternative.cc +++ /dev/null
@@ -1,35 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/accessibility/text_alternative.h" - -#include "cobalt/accessibility/internal/text_alternative_helper.h" -#include "cobalt/dom/document.h" -#include "cobalt/dom/element.h" -#include "cobalt/dom/text.h" - -namespace cobalt { -namespace accessibility { -std::string ComputeTextAlternative(const scoped_refptr<dom::Node>& node) { - // Update the computed styles first to ensure that any CSS that would modify - // the text contents has been applied (such as :before and :after). - if (node->node_document()) { - node->node_document()->UpdateComputedStyles(); - } - internal::TextAlternativeHelper helper; - helper.AppendTextAlternative(node); - return helper.GetTextAlternative(); -} -} // namespace accessibility -} // namespace cobalt
diff --git a/src/cobalt/accessibility/text_alternative.h b/src/cobalt/accessibility/text_alternative.h deleted file mode 100644 index c274fce..0000000 --- a/src/cobalt/accessibility/text_alternative.h +++ /dev/null
@@ -1,32 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_ACCESSIBILITY_TEXT_ALTERNATIVE_H_ -#define COBALT_ACCESSIBILITY_TEXT_ALTERNATIVE_H_ - -#include <string> - -#include "cobalt/dom/node.h" - -namespace cobalt { -namespace accessibility { - -// Compute the Text Alternative for the node per the wai-aria specification: -// https://www.w3.org/TR/2014/REC-wai-aria-implementation-20140320/#mapping_additional_nd_te -std::string ComputeTextAlternative(const scoped_refptr<dom::Node>& node); - -} // namespace accessibility -} // namespace cobalt - -#endif // COBALT_ACCESSIBILITY_TEXT_ALTERNATIVE_H_
diff --git a/src/cobalt/accessibility/tts_engine.h b/src/cobalt/accessibility/tts_engine.h deleted file mode 100644 index bba0aae..0000000 --- a/src/cobalt/accessibility/tts_engine.h +++ /dev/null
@@ -1,36 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_ACCESSIBILITY_TTS_ENGINE_H_ -#define COBALT_ACCESSIBILITY_TTS_ENGINE_H_ - -#include <string> - -namespace cobalt { -namespace accessibility { -// Interface for a TTS (text-to-speech) implementation. -class TTSEngine { - public: - // Speaks the contents of |text|, pre-empting any utterances that are - // currently in progress. - virtual void SpeakNow(const std::string& text) = 0; - // Queues the contents of |text| to be spoken after any in-progress utterances - // are finished. - virtual void Speak(const std::string& text) = 0; - virtual ~TTSEngine() {} -}; -} // namespace accessibility -} // namespace cobalt - -#endif // COBALT_ACCESSIBILITY_TTS_ENGINE_H_
diff --git a/src/cobalt/accessibility/tts_logger.h b/src/cobalt/accessibility/tts_logger.h deleted file mode 100644 index 25d2eed..0000000 --- a/src/cobalt/accessibility/tts_logger.h +++ /dev/null
@@ -1,40 +0,0 @@ -// Copyright 2017 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_ACCESSIBILITY_TTS_LOGGER_H_ -#define COBALT_ACCESSIBILITY_TTS_LOGGER_H_ - -#include <string> - -#include "base/logging.h" -#include "cobalt/accessibility/tts_engine.h" - -namespace cobalt { -namespace accessibility { -// TTSEngine implementation that just logs the text. -class TTSLogger : public TTSEngine { - public: - void SpeakNow(const std::string& text) override { LogText(text); } - void Speak(const std::string& text) override { LogText(text); } - - private: - void LogText(const std::string& text) { - LOG(INFO) << "Text-to-speech: " << text; - } - virtual ~TTSLogger() {} -}; -} // namespace accessibility -} // namespace cobalt - -#endif // COBALT_ACCESSIBILITY_TTS_LOGGER_H_
diff --git a/src/cobalt/audio/audio_device.cc b/src/cobalt/audio/audio_device.cc index 11ed4d2..8b7159d 100644 --- a/src/cobalt/audio/audio_device.cc +++ b/src/cobalt/audio/audio_device.cc
@@ -12,6 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. +#include <algorithm> #include <memory> #include "cobalt/audio/audio_device.h" @@ -30,11 +31,7 @@ namespace { const int kRenderBufferSizeFrames = 1024; -// AudioDevice will keep writing silence frames at the end of playback until the -// buffer is full to ensure the audible frames being played on platforms with -// strict underflow control. A large |kFramesPerChannel| will increase the -// silence between two sounds. So it shouldn't be set to a very large number. -const int kFramesPerChannel = kRenderBufferSizeFrames * 8; +const int kDefaultFramesPerChannel = 8 * kRenderBufferSizeFrames; } // namespace class AudioDevice::Impl { @@ -64,6 +61,7 @@ int number_of_channels_; SbMediaAudioSampleType output_sample_type_; RenderCallback* render_callback_; + int frames_per_channel_; // The |render_callback_| returns audio data in planar form. So we read it // into |input_audio_bus_| and convert it into interleaved form and store in @@ -90,11 +88,19 @@ : number_of_channels_(number_of_channels), output_sample_type_(GetPreferredOutputStarboardSampleType()), render_callback_(callback), +#if SB_API_VERSION >= 11 + frames_per_channel_(std::max(SbAudioSinkGetMinBufferSizeInFrames( + number_of_channels, output_sample_type_, + kStandardOutputSampleRate), + kDefaultFramesPerChannel)), +#else // SB_API_VERSION >= 11 + frames_per_channel_(kDefaultFramesPerChannel), +#endif // SB_API_VERSION >= 11 input_audio_bus_(static_cast<size_t>(number_of_channels), static_cast<size_t>(kRenderBufferSizeFrames), GetPreferredOutputSampleType(), ShellAudioBus::kPlanar), output_frame_buffer_( - new uint8[kFramesPerChannel * number_of_channels_ * + new uint8[frames_per_channel_ * number_of_channels_ * GetStarboardSampleTypeSize(output_sample_type_)]) { DCHECK(number_of_channels_ == 1 || number_of_channels_ == 2) << "Invalid number of channels: " << number_of_channels_; @@ -109,7 +115,7 @@ audio_sink_ = SbAudioSinkCreate( number_of_channels_, kStandardOutputSampleRate, output_sample_type_, kSbMediaAudioFrameStorageTypeInterleaved, frame_buffers_, - kFramesPerChannel, &AudioDevice::Impl::UpdateSourceStatusFunc, + frames_per_channel_, &AudioDevice::Impl::UpdateSourceStatusFunc, &AudioDevice::Impl::ConsumeFramesFunc, this); DCHECK(SbAudioSinkIsValid(audio_sink_)); } @@ -168,7 +174,7 @@ DCHECK_GE(frames_rendered_, frames_consumed_); *frames_in_buffer = static_cast<int>(frames_rendered_ - frames_consumed_); - if ((kFramesPerChannel - *frames_in_buffer) >= kRenderBufferSizeFrames) { + if ((frames_per_channel_ - *frames_in_buffer) >= kRenderBufferSizeFrames) { // If there was silence last time we were called, then the buffer has // already been zeroed out and we don't need to do it again. if (!was_silence_last_update_) { @@ -197,7 +203,7 @@ was_silence_last_update_ = silence; } - *offset_in_frames = frames_consumed_ % kFramesPerChannel; + *offset_in_frames = frames_consumed_ % frames_per_channel_; } void AudioDevice::Impl::ConsumeFrames(int frames_consumed) { @@ -208,7 +214,7 @@ inline void AudioDevice::Impl::FillOutputAudioBusForType() { // Determine the offset into the audio bus that represents the tail of // buffered data. - uint64 channel_offset = frames_rendered_ % kFramesPerChannel; + uint64 channel_offset = frames_rendered_ % frames_per_channel_; OutputType* output_buffer = reinterpret_cast<OutputType*>(output_frame_buffer_.get());
diff --git a/src/cobalt/base/wrap_main_starboard.h b/src/cobalt/base/wrap_main_starboard.h index 4dfa576..7ff43f1 100644 --- a/src/cobalt/base/wrap_main_starboard.h +++ b/src/cobalt/base/wrap_main_starboard.h
@@ -24,6 +24,9 @@ #include "starboard/client_porting/wrap_main/wrap_main.h" #include "starboard/event.h" #include "starboard/system.h" +#if SB_IS(EVERGREEN) +#include "third_party/musl/src/starboard/internal/hwcap_impl.h" +#endif namespace cobalt { namespace wrap_main { @@ -42,6 +45,9 @@ DCHECK(!g_started); DCHECK(!g_at_exit); g_at_exit = new base::AtExitManager(); +#if SB_IS(EVERGREEN) + init_musl_hwcap(); +#endif InitCobalt(data->argument_count, data->argument_values, data->link); DCHECK(!g_loop); @@ -59,7 +65,9 @@ if (!g_started) { DCHECK(!g_at_exit); g_at_exit = new base::AtExitManager(); - +#if SB_IS(EVERGREEN) + init_musl_hwcap(); +#endif InitCobalt(data->argument_count, data->argument_values, data->link); DCHECK(!g_loop);
diff --git a/src/cobalt/bindings/README.md b/src/cobalt/bindings/README.md index d276dc4..bb956cc 100644 --- a/src/cobalt/bindings/README.md +++ b/src/cobalt/bindings/README.md
@@ -151,7 +151,7 @@ # script/$engine -Then, we designate a specific area of code to be our engine specific implementation of the interfaces established in script. We [commit to an engine at gyp time](https://cs.corp.google.com/cobalt/starboard/build/platform_configuration.py?type=cs&q=file:py+%27javascript_engine%27&sq=package:%5Ecobalt$&g=0#223), and then based on that, [select the appropriate set of files](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/engine.gyp?type=cs&q=file:cobalt+file:gyp+javascript_engine&sq=package:%5Ecobalt$&g=0#26). This is the only area of Cobalt code (except for bindings/*/$engine, which is essentially more of the same stuff) that is allowed to include engine specific headers (files in v8/ and third_party/mozjs-45/). Maintaining this abstraction has been useful throughout our multiple JavaScript engine migrations over the years. +Then, we designate a specific area of code to be our engine specific implementation of the interfaces established in script. We commit to an engine at gyp time, and then based on that, [select the appropriate set of files](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/engine.gyp?type=cs&q=file:cobalt+file:gyp+javascript_engine&sq=package:%5Ecobalt$&g=0#26). This is the only area of Cobalt code (except for bindings/*/$engine, which is essentially more of the same stuff) that is allowed to include engine specific headers (files in v8/ and third_party/mozjs-45/). Maintaining this abstraction has been useful throughout our multiple JavaScript engine migrations over the years. A large portion of script/$engine is filling in the types discussed in the previous section. So [V8cEngine](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_engine.h?q=V8cEngine&sq=package:%5Ecobalt$&dr=CSs#31) implements JavaScriptEngine by wrapping a v8::Isolate, and [V8cGlobalEnvironment](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_global_environment.h?type=cs&q=V8cGlobalEnvironment&sq=package:%5Ecobalt$&g=0#44) implements GlobalEnvironment by wrapping a v8::Context. Note that these files are actually quite a bit bigger than just being thin wrappers over the V8 types, as they have more work to do in addition to just implementing their script interfaces, such as [maintaining state necessary for bindings](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_global_environment.h?type=cs&q=V8cGlobalEnvironment&sq=package:%5Ecobalt$&g=0#175) (interface objects need to be owned somewhere), [serving as a bridge between the Isolate](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_global_environment.h?type=cs&q=V8cGlobalEnvironment&sq=package:%5Ecobalt$&g=0#49), and [dealing with garbage collection interaction](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/v8c/v8c_engine.h?q=V8cEngine&sq=package:%5Ecobalt$&dr=CSs#61) (the engine specific [script::Tracer](https://cobalt.googlesource.com/cobalt/+/2a8c847d785c1602f60915c8e0112e0aec6a15a5/src/cobalt/script/tracer.h?type=cs&q=script::Tracer&sq=package:%5Ecobalt$&g=0#54) is implemented near them).
diff --git a/src/cobalt/browser/application.cc b/src/cobalt/browser/application.cc index 4ab000d..277a0e3 100644 --- a/src/cobalt/browser/application.cc +++ b/src/cobalt/browser/application.cc
@@ -18,14 +18,10 @@ #include "cobalt/browser/application.h" -#include <algorithm> -#include <map> #include <memory> #include <string> #include <vector> -#include "base/base64.h" -#include "base/base64url.h" #include "base/command_line.h" #include "base/lazy_instance.h" #include "base/logging.h" @@ -57,6 +53,7 @@ #include "cobalt/base/version_compatibility.h" #endif // defined(COBALT_ENABLE_VERSION_COMPATIBILITY_VALIDATIONS) #include "cobalt/base/window_size_changed_event.h" +#include "cobalt/browser/device_authentication.h" #include "cobalt/browser/memory_settings/auto_mem_settings.h" #include "cobalt/browser/memory_tracker/tool.h" #include "cobalt/browser/switches.h" @@ -68,8 +65,6 @@ #endif // defined(ENABLE_DEBUG_COMMAND_LINE_SWITCHES) #include "cobalt/system_window/input_event.h" #include "cobalt/trace_event/scoped_trace_to_file.h" -#include "crypto/hmac.h" -#include "net/base/escape.h" #include "starboard/configuration.h" #include "url/gurl.h" @@ -159,56 +154,6 @@ } #endif // ENABLE_WEBDRIVER -#if SB_API_VERSION >= 11 -std::string NumberToFourByteString(size_t n) { - std::string str; - str += static_cast<char>(((n & 0xff000000) >> 24)); - str += static_cast<char>(((n & 0x00ff0000) >> 16)); - str += static_cast<char>(((n & 0x0000ff00) >> 8)); - str += static_cast<char>((n & 0x000000ff)); - return str; -} - -std::string BuildMessageFragment(const std::string& key, - const std::string& value) { - std::string msg_fragment = NumberToFourByteString(key.length()) + key + - NumberToFourByteString(value.length()) + value; - return msg_fragment; -} - -std::string ComputeSignature(const std::string& cert_scope, - const std::string& start_time, - const std::string& base_64_secret) { - const size_t kSHA256DigestSize = 32; - - // Build signed_msg from cert_scope and start_time. - std::string signed_msg = BuildMessageFragment("cert_scope", cert_scope); - signed_msg += BuildMessageFragment("start_time", start_time); - - // Decode secret from base_64_secret. - std::string secret; - base::Base64Decode(base_64_secret, &secret); - - // Generate signature from signed_msg using HMAC-SHA256. - unsigned char signature_hash[kSHA256DigestSize] = {0}; - crypto::HMAC hmac(crypto::HMAC::SHA256); - if (!hmac.Init(secret)) { - DLOG(ERROR) << "Unable to initialize HMAC-SHA256."; - } - if (!hmac.Sign(signed_msg, signature_hash, kSHA256DigestSize)) { - DLOG(ERROR) << "Unable to sign HMAC-SHA256."; - } - std::string signature(signature_hash, signature_hash + kSHA256DigestSize); - - // Encode base_64_url_signature from signature. - std::string base_64_url_signature; - base::Base64UrlEncode(signature, base::Base64UrlEncodePolicy::OMIT_PADDING, - &base_64_url_signature); - - return base_64_url_signature; -} -#endif // SB_API_VERSION >= 11 - GURL GetInitialURL() { GURL initial_url = GURL(kDefaultURL); // Allow the user to override the default URL via a command line parameter. @@ -224,59 +169,21 @@ } #if SB_API_VERSION >= 11 - // Get cert_scope and base_64_secret - const size_t kCertificationScopeLength = 1023; - char cert_scope_property[kCertificationScopeLength + 1] = {0}; - bool result = - SbSystemGetProperty(kSbSystemPropertyCertificationScope, - cert_scope_property, kCertificationScopeLength); - if (!result) { - DLOG(ERROR) << "Unable to get kSbSystemPropertyCertificationScope"; - return initial_url; - } - std::string cert_scope(cert_scope_property); - - const size_t kBase64EncodedCertificationSecretLength = 1023; - char base_64_secret_property[kBase64EncodedCertificationSecretLength + 1] = { - 0}; - result = SbSystemGetProperty( - kSbSystemPropertyBase64EncodedCertificationSecret, - base_64_secret_property, kBase64EncodedCertificationSecretLength); - if (!result) { - DLOG(ERROR) - << "Unable to get kSbSystemPropertyBase64EncodedCertificationSecret"; - return initial_url; - } - std::string base_64_secret(base_64_secret_property); - - // Get current unix time in seconds. - std::string start_time = - std::to_string(static_cast<int64>(base::Time::Now().ToDoubleT())); - - // Add signed_query to the initial_url. - std::map<std::string, std::string> signed_query; - signed_query["cert_scope"] = cert_scope; - signed_query["start_time"] = start_time; - signed_query["sig"] = - ComputeSignature(cert_scope, start_time, base_64_secret); - + // Append the device authentication query parameters based on the platform's + // certification secret to the initial URL. std::string query = initial_url.query(); - std::map<std::string, std::string>::iterator it = signed_query.begin(); - while (it != signed_query.end()) { - std::string key = it->first; - std::string value = it->second; - - if (!query.empty()) query += "&"; - query += net::EscapeQueryParamValue(key, true); - if (!value.empty()) { - query += "=" + net::EscapeQueryParamValue(value, true); - } - it++; + std::string device_authentication_query_string = + GetDeviceAuthenticationSignedURLQueryString(); + if (!query.empty() && !device_authentication_query_string.empty()) { + query += "&"; } + query += device_authentication_query_string; - GURL::Replacements replacements; - replacements.SetQueryStr(query); - initial_url = initial_url.ReplaceComponents(replacements); + if (!query.empty()) { + GURL::Replacements replacements; + replacements.SetQueryStr(query); + initial_url = initial_url.ReplaceComponents(replacements); + } #endif // SB_API_VERSION >= 11 return initial_url;
diff --git a/src/cobalt/browser/browser.gyp b/src/cobalt/browser/browser.gyp index 7b04429..5ac69e0 100644 --- a/src/cobalt/browser/browser.gyp +++ b/src/cobalt/browser/browser.gyp
@@ -28,6 +28,8 @@ 'application.h', 'browser_module.cc', 'browser_module.h', + 'device_authentication.cc', + 'device_authentication.h', 'lifecycle_observer.h', 'memory_settings/auto_mem.cc', 'memory_settings/auto_mem.h', @@ -126,7 +128,6 @@ ], 'dependencies': [ '<@(cobalt_platform_dependencies)', - '<(DEPTH)/cobalt/accessibility/accessibility.gyp:accessibility', '<(DEPTH)/cobalt/account/account.gyp:account', '<(DEPTH)/cobalt/audio/audio.gyp:audio', '<(DEPTH)/cobalt/base/base.gyp:base', @@ -219,6 +220,7 @@ 'target_name': 'browser_test', 'type': '<(gtest_target_type)', 'sources': [ + 'device_authentication_test.cc', 'storage_upgrade_handler_test.cc', 'memory_settings/auto_mem_test.cc', 'memory_settings/auto_mem_settings_test.cc',
diff --git a/src/cobalt/browser/browser_bindings_gen.gyp b/src/cobalt/browser/browser_bindings_gen.gyp index 6a50f63..4d50786 100644 --- a/src/cobalt/browser/browser_bindings_gen.gyp +++ b/src/cobalt/browser/browser_bindings_gen.gyp
@@ -52,7 +52,6 @@ '../dom/audio_track.idl', '../dom/audio_track_list.idl', '../dom/blob.idl', - '../dom/c_val_key_list.idl', '../dom/c_val_view.idl', '../dom/camera_3d.idl', '../dom/captions/system_caption_settings.idl', @@ -175,7 +174,6 @@ '../h5vcc/h5vcc_runtime_event_target.idl', '../h5vcc/h5vcc_settings.idl', '../h5vcc/h5vcc_sso.idl', - '../h5vcc/h5vcc_storage.idl', '../h5vcc/h5vcc_system.idl', '../h5vcc/h5vcc_trace_event.idl',
diff --git a/src/cobalt/browser/debug_console.cc b/src/cobalt/browser/debug_console.cc index 27f4263..b769196 100644 --- a/src/cobalt/browser/debug_console.cc +++ b/src/cobalt/browser/debug_console.cc
@@ -56,21 +56,6 @@ } } -// Convert from mode to string. -std::string DebugConsoleModeIntToString(int mode) { - switch (mode) { - case debug::console::DebugHub::kDebugConsoleHud: - return kDebugConsoleHudString; - case debug::console::DebugHub::kDebugConsoleOn: - return kDebugConsoleOnString; - case debug::console::DebugHub::kDebugConsoleOff: - return kDebugConsoleOffString; - default: - NOTREACHED(); - return kDebugConsoleOffString; - } -} - // Returns the debug console mode as specified by the command line. // If unspecified by the command line, base::nullopt is returned. base::Optional<int> GetDebugConsoleModeFromCommandLine() { @@ -86,45 +71,6 @@ return base::nullopt; } -// Returns the path of the temporary file used to store debug console visibility -// mode preferences. -bool GetDebugConsoleModeStoragePath(base::FilePath* out_file_path) { - DCHECK(out_file_path); - if (base::PathService::Get(cobalt::paths::DIR_COBALT_DEBUG_OUT, - out_file_path)) { - *out_file_path = out_file_path->Append("last_debug_console_mode.txt"); - return true; - } else { - return false; - } -} - -// Saves the specified visibility mode preferences to disk so that they can -// be restored in another session. Since this functionality is not critical, -// we silently do nothing if there is a failure. -void SaveModeToPreferences(int mode) { - std::string mode_string = DebugConsoleModeIntToString(mode); - base::FilePath preferences_file; - if (GetDebugConsoleModeStoragePath(&preferences_file)) { - base::WriteFile(preferences_file, mode_string.c_str(), - static_cast<int>(mode_string.size())); - } -} - -// Load debug console visibility mode preferences from disk. Since this -// functionality is not critical, we silently do nothing if there is a failure. -base::Optional<int> LoadModeFromPreferences() { - std::string saved_contents; - base::FilePath preferences_file; - if (GetDebugConsoleModeStoragePath(&preferences_file)) { - if (base::ReadFileToString(preferences_file, &saved_contents)) { - return DebugConsoleModeStringToInt(saved_contents); - } - } - - return base::nullopt; -} - // Returns the debug console's initial visibility mode. int GetInitialMode() { // First check to see if the mode is explicitly set from the command line. @@ -134,13 +80,7 @@ return *mode_from_command_line; } - // Now check to see if mode preferences have been saved to disk. - base::Optional<int> mode_from_preferences = LoadModeFromPreferences(); - if (mode_from_preferences) { - return *mode_from_preferences; - } - - // If all else fails, default the debug console to off. + // By default the debug console is off. return debug::console::DebugHub::kDebugConsoleOff; } @@ -239,23 +179,13 @@ #endif // SB_HAS(ON_SCREEN_KEYBOARD) void DebugConsole::SetMode(int mode) { - int mode_to_save; - { - base::AutoLock lock(mode_mutex_); - mode_ = mode; - mode_to_save = mode_; - } - SaveModeToPreferences(mode_to_save); + base::AutoLock lock(mode_mutex_); + mode_ = mode; } void DebugConsole::CycleMode() { - int mode_to_save; - { - base::AutoLock lock(mode_mutex_); - mode_ = (mode_ + 1) % debug::console::DebugHub::kDebugConsoleNumModes; - mode_to_save = mode_; - } - SaveModeToPreferences(mode_to_save); + base::AutoLock lock(mode_mutex_); + mode_ = (mode_ + 1) % debug::console::DebugHub::kDebugConsoleNumModes; } int DebugConsole::GetMode() {
diff --git a/src/cobalt/browser/device_authentication.cc b/src/cobalt/browser/device_authentication.cc new file mode 100644 index 0000000..7c8eeea --- /dev/null +++ b/src/cobalt/browser/device_authentication.cc
@@ -0,0 +1,200 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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 "cobalt/browser/device_authentication.h" + +#include <algorithm> +#include <map> + +#include "base/base64.h" +#include "base/base64url.h" +#include "base/logging.h" +#include "base/time/time.h" +#include "crypto/hmac.h" +#include "net/base/escape.h" +#include "starboard/system.h" + +namespace cobalt { +namespace browser { + +#if SB_API_VERSION >= 11 + +namespace { + +constexpr size_t kSHA256DigestSize = 32; + +bool ComputeSignatureWithSystemPropertySecret(const std::string& message, + uint8_t* signature) { + const size_t kBase64EncodedCertificationSecretLength = 1023; + char base_64_secret_property[kBase64EncodedCertificationSecretLength + 1] = { + 0}; + bool result = SbSystemGetProperty( + kSbSystemPropertyBase64EncodedCertificationSecret, + base_64_secret_property, kBase64EncodedCertificationSecretLength); + if (!result) { + return false; + } + + ComputeHMACSHA256SignatureWithProvidedKey(message, base_64_secret_property, + signature, kSHA256DigestSize); + return true; +} + +bool ComputeSignatureFromSignAPI(const std::string& message, + uint8_t* signature) { + return SbSystemSignWithCertificationSecretKey( + reinterpret_cast<const uint8_t*>(message.data()), message.size(), + signature, kSHA256DigestSize); +} + +// Check to see if we can query the platform for the secret key. If so, +// go ahead and use it to sign the message, otherwise try to use the +// SbSystemSignWithCertificationSecretKey() method to sign the message. If +// both methods fail, return an empty string. +std::string ComputeBase64Signature(const std::string& message) { + uint8_t signature[kSHA256DigestSize]; + + if (ComputeSignatureFromSignAPI(message, signature)) { + DLOG(INFO) << "Using certification signature provided by " + << "SbSystemSignWithCertificationSecretKey()."; + } else if (ComputeSignatureWithSystemPropertySecret(message, signature)) { + DLOG(INFO) << "Using certification key from SbSystemGetProperty()."; + } else { + return std::string(); + } + + std::string base_64_url_signature; + base::Base64UrlEncode(std::string(signature, signature + kSHA256DigestSize), + base::Base64UrlEncodePolicy::OMIT_PADDING, + &base_64_url_signature); + return base_64_url_signature; +} + +std::string NumberToFourByteString(size_t n) { + std::string str; + str += static_cast<char>(((n & 0xff000000) >> 24)); + str += static_cast<char>(((n & 0x00ff0000) >> 16)); + str += static_cast<char>(((n & 0x0000ff00) >> 8)); + str += static_cast<char>((n & 0x000000ff)); + return str; +} + +// Used by ComputeMessage() to create a message component as a string. +std::string BuildMessageFragment(const std::string& key, + const std::string& value) { + std::string msg_fragment = NumberToFourByteString(key.length()) + key + + NumberToFourByteString(value.length()) + value; + return msg_fragment; +} + +// Returns the certification scope provided by the platform to use with device +// authentication. +std::string GetCertScopeFromPlatform() { + // Get cert_scope and base_64_secret + const size_t kCertificationScopeLength = 1023; + char cert_scope_property[kCertificationScopeLength + 1] = {0}; + bool result = + SbSystemGetProperty(kSbSystemPropertyCertificationScope, + cert_scope_property, kCertificationScopeLength); + if (!result) { + DLOG(ERROR) << "Unable to get kSbSystemPropertyCertificationScope"; + return std::string(); + } + + return cert_scope_property; +} + +// Returns the start time provided by the platform for use with device +// authentication. +std::string GetStartTime() { + return std::to_string(static_cast<int64_t>(base::Time::Now().ToDoubleT())); +} + +} // namespace + +std::string GetDeviceAuthenticationSignedURLQueryString() { + std::string cert_scope = GetCertScopeFromPlatform(); + if (cert_scope.empty()) { + LOG(WARNING) << "Error retrieving certification scope required for " + << "device authentication."; + return std::string(); + } + std::string start_time = GetStartTime(); + CHECK(!start_time.empty()); + + std::string base64_signature = + ComputeBase64Signature(ComputeMessage(cert_scope, start_time)); + + return GetDeviceAuthenticationSignedURLQueryStringFromComponents( + cert_scope, start_time, base64_signature); +} + +std::string GetDeviceAuthenticationSignedURLQueryStringFromComponents( + const std::string& cert_scope, const std::string& start_time, + const std::string& base64_signature) { + CHECK(!cert_scope.empty()); + CHECK(!start_time.empty()); + + std::map<std::string, std::string> signed_query_components; + signed_query_components["cert_scope"] = cert_scope; + signed_query_components["start_time"] = start_time; + signed_query_components["sig"] = base64_signature; + + std::string query; + for (const auto& query_component : signed_query_components) { + const std::string& key = query_component.first; + const std::string& value = query_component.second; + + if (!query.empty()) query += "&"; + query += net::EscapeQueryParamValue(key, true); + if (!value.empty()) { + query += "=" + net::EscapeQueryParamValue(value, true); + } + } + + return query; +} + +// Combine multiple message components into a string that will be used as the +// message that we will sign. +std::string ComputeMessage(const std::string& cert_scope, + const std::string& start_time) { + // Build message from cert_scope and start_time. + return BuildMessageFragment("cert_scope", cert_scope) + + BuildMessageFragment("start_time", start_time); +} + +void ComputeHMACSHA256SignatureWithProvidedKey(const std::string& message, + const std::string& base64_key, + uint8_t* signature, + size_t signature_size_in_bytes) { + CHECK_GE(signature_size_in_bytes, 32U); + + std::string key; + base::Base64Decode(base64_key, &key); + + // Generate signature from message using HMAC-SHA256. + crypto::HMAC hmac(crypto::HMAC::SHA256); + if (!hmac.Init(key)) { + DLOG(ERROR) << "Unable to initialize HMAC-SHA256."; + } + if (!hmac.Sign(message, signature, signature_size_in_bytes)) { + DLOG(ERROR) << "Unable to sign HMAC-SHA256."; + } +} + +#endif // SB_API_VERSION >= 11 + +} // namespace browser +} // namespace cobalt
diff --git a/src/cobalt/browser/device_authentication.h b/src/cobalt/browser/device_authentication.h new file mode 100644 index 0000000..f3ca94b --- /dev/null +++ b/src/cobalt/browser/device_authentication.h
@@ -0,0 +1,60 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +#ifndef COBALT_BROWSER_DEVICE_AUTHENTICATION_H_ +#define COBALT_BROWSER_DEVICE_AUTHENTICATION_H_ + +#include <string> + +#include "starboard/configuration.h" +#include "starboard/types.h" + +namespace cobalt { +namespace browser { + +#if SB_API_VERSION >= 11 + +// Returns a base64 encoded SHA256 hash representing the device authentication +// signature based on the device certification scope and the current time. +std::string GetDeviceAuthenticationSignedURLQueryString(); + +// The following methods are deterministic helper functions used in the +// implementation of the public method above. They are declared here so that +// they can be tested in (white box) unit tests. + +// Similar to the method above, but all platform queries are resolved to make +// this a deterministic and testable function. +std::string GetDeviceAuthenticationSignedURLQueryStringFromComponents( + const std::string& cert_scope, const std::string& start_time, + const std::string& base64_signature); + +// Given the certification parameters, computes a message to be used as input +// to the signing process. +std::string ComputeMessage(const std::string& cert_scope, + const std::string& start_time); + +// Given a message (arbitrary sequence of bytes) and a base64-encoded key +// key, compute the HMAC-SHA256 signature and store it in the |signature_hash| +// out parameter. Note that 32 bytes will be written to the output hash, it is +// an error if |signature_hash_size_in_bytes| is less than 32. +void ComputeHMACSHA256SignatureWithProvidedKey( + const std::string& message, const std::string& base64_key, + uint8_t* signature_hash, size_t signature_hash_size_in_bytes); + +#endif // SB_API_VERSION >= 11 + +} // namespace browser +} // namespace cobalt + +#endif // COBALT_BROWSER_DEVICE_AUTHENTICATION_H_
diff --git a/src/cobalt/browser/device_authentication_test.cc b/src/cobalt/browser/device_authentication_test.cc new file mode 100644 index 0000000..a820d94 --- /dev/null +++ b/src/cobalt/browser/device_authentication_test.cc
@@ -0,0 +1,146 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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 "cobalt/browser/device_authentication.h" + +#include "base/base64.h" +#include "base/base64url.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace cobalt { +namespace browser { + +#if SB_API_VERSION >= 11 + +constexpr size_t kSHA256DigestSize = 32; + +namespace { + +std::string ToBase64Message(const std::string& cert_scope, + const std::string& start_time) { + std::string base64_message; + CHECK(base::Base64Encode(browser::ComputeMessage(cert_scope, start_time), + &base64_message)); + return base64_message; +} + +std::string ComputeBase64URLSignatureFromBase64Message( + const std::string& base64_message, const std::string& base64_secret_key) { + uint8_t signature[kSHA256DigestSize]; + + std::string message; + CHECK(base::Base64Decode(base64_message, &message)); + ComputeHMACSHA256SignatureWithProvidedKey(message, base64_secret_key, + signature, kSHA256DigestSize); + + std::string base_64_url_signature; + base::Base64UrlEncode(std::string(signature, signature + kSHA256DigestSize), + base::Base64UrlEncodePolicy::OMIT_PADDING, + &base_64_url_signature); + return base_64_url_signature; +} + +std::string CreateSignedURLQueryString(const std::string& cert_scope, + const std::string& start_time, + const std::string& base64_secret_key) { + return GetDeviceAuthenticationSignedURLQueryStringFromComponents( + cert_scope, start_time, + ComputeBase64URLSignatureFromBase64Message( + ToBase64Message(cert_scope, start_time), base64_secret_key)); +} + +} // namespace + +TEST(DeviceAuthenticationTest, ComputeMessageTest) { + EXPECT_EQ( + "AAAACmNlcnRfc2NvcGUAAAANbXktY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAACjE1NjUx" + "NjE1NTY=", + ToBase64Message("my-cert-scope", "1565161556")); + EXPECT_EQ( + "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAA" + "CjE1NjUxNjMwNjU=", + ToBase64Message("my-other-cert-scope", "1565163065")); + EXPECT_EQ( + "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAA" + "CjE1NjUxNjMyNDU=", + ToBase64Message("my-other-cert-scope", "1565163245")); + EXPECT_EQ( + "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF90aW1lAAAA" + "CjI3OTAzMjY2Mzk=", + ToBase64Message("my-other-cert-scope", "2790326639")); + EXPECT_EQ( + "AAAACmNlcnRfc2NvcGUAAAAEeWFjcwAAAApzdGFydF90aW1lAAAACjEzNDAwMDAzMTI=", + ToBase64Message("yacs", "1340000312")); +} + +TEST(DeviceAuthenticationTest, ComputeSignatureWithProvidedSecretTest) { + EXPECT_EQ("5duoLo5TELzyMQ6Fz-nmtLH3-nR4GrYfJ5RqTWU33LY", + ComputeBase64URLSignatureFromBase64Message( + "AAAACmNlcnRfc2NvcGUAAAANbXktY2VydC1zY29wZQAAAApzdGFydF90aW1lAA" + "AACjE1NjUxNjE1NTY=", + "abcdefghijklmnop1234567890abcdefghijklmnopqr")); + EXPECT_EQ("zrHJxDjsg60vF-fnGD9J7QaK2fw2QEZD7PIIfHMYmUg", + ComputeBase64URLSignatureFromBase64Message( + "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF" + "90aW1lAAAACjE1NjUxNjMwNjU=", + "abcdefghijklmnop1234567890abcdefghijklmnopqr")); + EXPECT_EQ("FnycnpFnmzgcNBIdJoymQvrS0_1uet_bmCtpuAmQR2s", + ComputeBase64URLSignatureFromBase64Message( + "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF" + "90aW1lAAAACjE1NjUxNjMyNDU=", + "abcdefghi5555nop1234567890abcdef5555klmn6666")); + EXPECT_EQ("N-nDY11_8HWFKEZPiQenQrC3SXuuPahs-er-n7Xh6ig", + ComputeBase64URLSignatureFromBase64Message( + "AAAACmNlcnRfc2NvcGUAAAATbXktb3RoZXItY2VydC1zY29wZQAAAApzdGFydF" + "90aW1lAAAACjI3OTAzMjY2Mzk=", + "abcdefghi5555nop1234567890abcdef5555klmn6666")); + EXPECT_EQ("dX0apAEsG2yWm9da6qTded4qd-mqgExeuJam99z-AHk", + ComputeBase64URLSignatureFromBase64Message( + "AAAACmNlcnRfc2NvcGUAAAAEeWFjcwAAAApzdGFydF90aW1lAAAACjEzNDAwMD" + "AzMTI=", + "11111111111111111111111111111111111111111111")); +} + +// This is the main end-to-end test for device authentication. +TEST(DeviceAuthenticationTest, + GetDeviceAuthenticationSignedURLQueryStringFromComponentsTest) { + EXPECT_EQ( + "cert_scope=my-cert-scope&sig=5duoLo5TELzyMQ6Fz-nmtLH3-" + "nR4GrYfJ5RqTWU33LY&start_time=1565161556", + CreateSignedURLQueryString( + "my-cert-scope", "1565161556", + "abcdefghijklmnop1234567890abcdefghijklmnopqr")); + EXPECT_EQ( + "cert_scope=my-other-cert-scope&sig=" + "Lf2zunrdhjH8q3ehdUy0tneTtamWigcyTgQl7zxWgnQ&start_time=123456789", + CreateSignedURLQueryString( + "my-other-cert-scope", "123456789", + "abcdefghijklmnop1234567890abcdefghijklmnopqr")); + EXPECT_EQ( + "cert_scope=my-other-cert-scope&sig=" + "c5YZB0Rtv8Nf8gLSbE052ZvCUEpouP28nUq77FEgg88&start_time=11111111", + CreateSignedURLQueryString( + "my-other-cert-scope", "11111111", + "11111111111111111111111111111111111111111111")); + EXPECT_EQ( + "cert_scope=yacs&sig=YKjLEzSl2_ub-05Ajaww0HOOPElxEPUc4SEiQnGAfaE&start_" + "time=11111111", + CreateSignedURLQueryString( + "yacs", "11111111", "11111111111111111111111111111111111111111111")); +} + +#endif // SB_API_VERSION >= 11 + +} // namespace browser +} // namespace cobalt
diff --git a/src/cobalt/browser/trace_manager.h b/src/cobalt/browser/trace_manager.h deleted file mode 100644 index b774f11..0000000 --- a/src/cobalt/browser/trace_manager.h +++ /dev/null
@@ -1,78 +0,0 @@ -// Copyright 2016 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_BROWSER_TRACE_MANAGER_H_ -#define COBALT_BROWSER_TRACE_MANAGER_H_ - -#include <map> -#include <string> - -#include "base/threading/thread_checker.h" -#include "cobalt/debug/console/command_manager.h" -#include "cobalt/trace_event/event_parser.h" -#include "cobalt/trace_event/scoped_trace_to_file.h" - -namespace cobalt { -namespace browser { - -// Wrapper class which wraps all trace related stuff. -class TraceManager { - public: - // Returns whether there's a trace that is active. - static bool IsTracing(); - - TraceManager(); - - // Called by browser module when an input event is produced. - void OnInputEventProduced(); - - // Message handler callback for trace message from debug console. - void OnTraceMessage(const std::string& message); - - // Message handler callback for input trace message from debug console. - void OnInputTraceMessage(const std::string& message); - - // Called when receiving and finishing receiving parsed trace events. - void OnReceiveTraceEvent( - const scoped_refptr<trace_event::EventParser::ScopedEvent>& event); - void OnFinishReceiveTraceEvent(); - - private: - typedef std::multimap<int64, - scoped_refptr<trace_event::EventParser::ScopedEvent> > - StartTimeToEventMap; - - // The message loop on which we'll do all our work. - MessageLoop* const self_message_loop_; - - // Command handler object for trace command from the debug console. - debug::console::ConsoleCommandManager::CommandHandler trace_command_handler_; - // Command handler object for input trace command from the debug console. - debug::console::ConsoleCommandManager::CommandHandler - input_trace_command_handler_; - // Whether input tracing is enabled. - bool input_tracing_enabled_; - - THREAD_CHECKER(thread_checker_); - // This object can be set to start a trace if a hotkey (like F3) is pressed. - // While initialized, it means that a trace is on-going. - scoped_ptr<trace_event::ScopedTraceToFile> trace_to_file_; - // Record of a list of events we're interested in, ordered by starting time. - StartTimeToEventMap start_time_to_event_map_; -}; - -} // namespace browser -} // namespace cobalt - -#endif // COBALT_BROWSER_TRACE_MANAGER_H_
diff --git a/src/cobalt/browser/web_module.cc b/src/cobalt/browser/web_module.cc index e1ba8b4..40bce3c 100644 --- a/src/cobalt/browser/web_module.cc +++ b/src/cobalt/browser/web_module.cc
@@ -594,6 +594,7 @@ media_source_registry_.reset(new dom::MediaSource::Registry); media_session_client_ = media_session::MediaSessionClient::Create(); + media_session_client_->SetMediaPlayerFactory(data.web_media_player_factory); system_caption_settings_ = new cobalt::dom::captions::SystemCaptionSettings(); @@ -1076,6 +1077,7 @@ void WebModule::Impl::SetWebMediaPlayerFactory( media::WebMediaPlayerFactory* web_media_player_factory) { window_->set_web_media_player_factory(web_media_player_factory); + media_session_client_->SetMediaPlayerFactory(web_media_player_factory); } void WebModule::Impl::SetApplicationState(base::ApplicationState state) {
diff --git a/src/cobalt/browser/web_module.h b/src/cobalt/browser/web_module.h index 5e94dbb..7f8ad01 100644 --- a/src/cobalt/browser/web_module.h +++ b/src/cobalt/browser/web_module.h
@@ -26,7 +26,6 @@ #include "base/synchronization/waitable_event.h" #include "base/threading/thread.h" #include "base/threading/thread_checker.h" -#include "cobalt/accessibility/tts_engine.h" #include "cobalt/base/address_sanitizer.h" #include "cobalt/base/source_location.h" #include "cobalt/browser/lifecycle_observer.h"
diff --git a/src/cobalt/build/all.gyp b/src/cobalt/build/all.gyp index a53c52f..002d625 100644 --- a/src/cobalt/build/all.gyp +++ b/src/cobalt/build/all.gyp
@@ -31,7 +31,6 @@ 'type': 'none', 'dependencies': [ '<(DEPTH)/base/base.gyp:base_unittests', - '<(DEPTH)/cobalt/accessibility/accessibility_test.gyp:*', '<(DEPTH)/cobalt/audio/audio.gyp:*', '<(DEPTH)/cobalt/audio/audio_test.gyp:*', '<(DEPTH)/cobalt/base/base.gyp:*', @@ -98,6 +97,11 @@ '<(DEPTH)/starboard/starboard_all.gyp:starboard_all', ], }], + ['target_arch in ["x86", "x64", "arm", "arm64"]', { + 'dependencies': [ + '<(DEPTH)/starboard/elf_loader/elf_loader.gyp:elf_loader', + ], + }], ], }, ],
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id index 80c1e89..45fb3e0 100644 --- a/src/cobalt/build/build.id +++ b/src/cobalt/build/build.id
@@ -1 +1 @@ -217501 \ No newline at end of file +220639 \ No newline at end of file
diff --git a/src/cobalt/build/cobalt_archive.py b/src/cobalt/build/cobalt_archive.py index 9e50fec..e91dfe7 100644 --- a/src/cobalt/build/cobalt_archive.py +++ b/src/cobalt/build/cobalt_archive.py
@@ -80,7 +80,9 @@ include_black_box_tests=include_black_box_tests) -def ExtractCobaltArchive(input_zip_path, output_directory_path, outstream=None): +def ExtractCobaltArchive(input_zip_path, + output_directory_path, + outstream=None): """Returns True if the extract operation was successfull.""" archive = CobaltArchive(archive_zip_path=input_zip_path) return archive.ExtractTo(output_dir=output_directory_path, @@ -183,7 +185,7 @@ perms = _GetFilePermissions(file_path) if (stat.S_IXUSR) & perms: executable_files.append(archive_path) - # TODO(niteris): Use and implement _FoldIdenticalFiles() to reduce + # TODO: Use and implement _FoldIdenticalFiles() to reduce # duplicate files. This will help platforms like nxswitch which include # a lot of duplicate files for the sdk. try: @@ -295,7 +297,8 @@ """Finds necessary files and makes an archive.""" _MakeDirs(os.path.dirname(output_archive_path)) out_directory = paths.BuildOutputDirectory(platform_name, config) - root_dir = os.path.abspath(os.path.join(out_directory, '..', '..')) + root_dir = os.path.abspath( + os.path.normpath(os.path.join(out_directory, '..', '..'))) flist = filelist.FileList() inc_paths = _GetDeployPaths(platform_name, config) logging.info('Adding binary files to bundle...') @@ -427,7 +430,7 @@ if not config: config = raw_input('config: ') if not output_zip: - output_zip = raw_input('output_zip: ') + output_zip = os.path.normpath(raw_input('output_zip: ')) if not output_zip.endswith('.zip'): output_zip += '.zip' start_time = time.time() @@ -515,7 +518,7 @@ _MakeCobaltPlatformArchive( platform=args.platform, config=args.config, - output_zip=args.out_path, + output_zip=os.path.normpath(args.out_path), include_black_box_tests=args.include_black_box_tests) sys.exit(0) elif args.extract:
diff --git a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py index 8224154..3f34428 100644 --- a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py +++ b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/finalize_decompression/decompress.py
@@ -65,33 +65,32 @@ os.makedirs(path) -def _ExtractSymlinks(cwd, symlink_dir_list): +def _ExtractSymlinks(archive_root, symlink_dir_list): """Recreates symlinks on Windows and linux.""" - prev_cwd = os.getcwd() - cwd = os.path.normpath(cwd) + archive_root = os.path.normpath(archive_root) + if _IS_WINDOWS: + archive_root = '\\\\?\\' + archive_root + for link_path, real_path in symlink_dir_list: + # link_path and real_path are assumed to be both relative paths. + real_path = os.path.normpath(real_path) + link_path = os.path.normpath(link_path) + target_path = os.path.relpath(real_path, os.path.dirname(link_path)) + link_path = os.path.join(archive_root, link_path) + if not os.path.exists(os.path.dirname(link_path)): + _MakeDirs(os.path.dirname(link_path)) + _CreateSymlink(target_path, link_path) + # Check that all the symlinks point to an existing directory. all_ok = True - try: - os.chdir(cwd) - for link_path, real_path in symlink_dir_list: - link_path = os.path.abspath(link_path) - real_path = os.path.abspath(real_path) - if not os.path.exists(real_path): - _MakeDirs(real_path) - if not os.path.exists(os.path.dirname(link_path)): - _MakeDirs(os.path.dirname(link_path)) - assert os.path.exists(real_path) - real_path = os.path.relpath(real_path) - _CreateSymlink(real_path, link_path) - if not os.path.exists(real_path): - logging.critical('Error target folder %s does not exist.', - os.path.abspath(real_path)) - all_ok = False - if not os.path.exists(link_path): - logging.critical('Error link folder %s does not exist.', - os.path.abspath(link_path)) - all_ok = False - finally: - os.chdir(prev_cwd) + cwd = os.getcwd() + for link_path, _ in symlink_dir_list: + link_path = os.path.join(archive_root, link_path) + try: + # This will raise an error if the link points to an invalid directory. + os.chdir(link_path) + except: + all_ok = False + finally: + os.chdir(cwd) if not all_ok: logging.critical('\n*******************************************' '\nErrors happended during symlink extraction.'
diff --git a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md index 44ba4c9..df9ef75 100644 --- a/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md +++ b/src/cobalt/build/cobalt_archive_content/__cobalt_archive/run/readme.md
@@ -12,8 +12,6 @@ therefore *stable* and any Cobalt archive can be run the same binaries/tests using the same shell command. -Please see go/cobalt-archive-doc - Example: python __cobalt_archive/run/run_cobalt.py --device_id IP
diff --git a/src/cobalt/build/cobalt_archive_test.py b/src/cobalt/build/cobalt_archive_test.py index 086a897..fe232e5 100644 --- a/src/cobalt/build/cobalt_archive_test.py +++ b/src/cobalt/build/cobalt_archive_test.py
@@ -79,6 +79,7 @@ tf = filelist_test.TempFileSystem() tf.Clear() tf.Make() + flist.AddFile(tf.root_in_tmp, tf.test_txt) flist.AddSymLink(tf.root_in_tmp, tf.sym_dir) bundle_zip = os.path.join(tf.root_tmp, 'bundle.zip') car = cobalt_archive.CobaltArchive(bundle_zip)
diff --git a/src/cobalt/build/cobalt_configuration.gypi b/src/cobalt/build/cobalt_configuration.gypi index 76ffb6b..9feeca1 100644 --- a/src/cobalt/build/cobalt_configuration.gypi +++ b/src/cobalt/build/cobalt_configuration.gypi
@@ -534,6 +534,7 @@ 'COBALT_BUILD_TYPE_GOLD', 'COBALT_FORCE_CSP', 'COBALT_FORCE_HTTPS', + 'OFFICIAL_BUILD', # Chromium base relies on this. 'TRACING_DISABLED', ], },
diff --git a/src/cobalt/build/cobalt_configuration.py b/src/cobalt/build/cobalt_configuration.py index f377bff..eae97f9 100644 --- a/src/cobalt/build/cobalt_configuration.py +++ b/src/cobalt/build/cobalt_configuration.py
@@ -120,7 +120,6 @@ def GetTestTargets(self): return [ - 'accessibility_test', 'audio_test', 'base_test', 'base_unittests',
diff --git a/src/cobalt/content/icu/icudata.lst b/src/cobalt/content/icu/icudata.lst deleted file mode 100644 index ae20b1e..0000000 --- a/src/cobalt/content/icu/icudata.lst +++ /dev/null
@@ -1,230 +0,0 @@ -brkitr/char.brk -brkitr/en.res -brkitr/en_US.res -brkitr/fi.res -brkitr/ja.res -brkitr/line.brk -brkitr/line_fi.brk -brkitr/res_index.res -brkitr/root.res -brkitr/sent.brk -brkitr/thaidict.ctd -brkitr/title.brk -brkitr/word.brk -brkitr/word_ja.brk -cnvalias.icu -coll/da.res -coll/de.res -coll/en.res -coll/en_GB.res -coll/en_US.res -coll/es.res -coll/fi.res -coll/fr.res -coll/invuca.icu -coll/it.res -coll/ja.res -coll/ko.res -coll/nb.res -coll/nl.res -coll/pl.res -coll/pt.res -coll/pt_BR.res -coll/pt_PT.res -coll/res_index.res -coll/root.res -coll/ru.res -coll/sv.res -coll/ucadata.icu -coll/zh.res -coll/zh_Hans.res -coll/zh_Hans_CN.res -coll/zh_Hant.res -coll/zh_Hant_TW.res -confusables.cfu -curr/da.res -curr/de.res -curr/en.res -curr/es.res -curr/fi.res -curr/fr.res -curr/it.res -curr/ja.res -curr/ko.res -curr/nb.res -curr/nl.res -curr/no.res -curr/pl.res -curr/pool.res -curr/pt.res -curr/pt_PT.res -curr/root.res -curr/ru.res -curr/sv.res -curr/zh.res -curr/zh_CN.res -curr/zh_Hans.res -curr/zh_Hans_CN.res -curr/zh_Hant.res -curr/zh_Hant_TW.res -curr/zh_TW.res -da.res -de.res -en.res -en_GB.res -en_US.res -es.res -fi.res -fr.res -gb18030.cnv -ibm-1089_P100-1995.cnv -ibm-1373_P100-2002.cnv -ibm-1383_P110-1999.cnv -ibm-33722_P12A_P12A-2004_U2.cnv -ibm-5354_P100-1998.cnv -ibm-878_P100-1996.cnv -ibm-9005_X110-2007.cnv -ibm-943_P15A-2003.cnv -ibm-9447_P100-2002.cnv -ibm-970_P110_P110-2006_U2.cnv -icustd.res -icuver.res -it.res -ja.res -keyTypeData.res -ko.res -lang/da.res -lang/de.res -lang/en.res -lang/es.res -lang/fi.res -lang/fr.res -lang/it.res -lang/ja.res -lang/ko.res -lang/nb.res -lang/nl.res -lang/no.res -lang/pl.res -lang/pool.res -lang/pt.res -lang/pt_PT.res -lang/root.res -lang/ru.res -lang/sv.res -lang/zh.res -lang/zh_CN.res -lang/zh_Hans.res -lang/zh_Hans_CN.res -lang/zh_Hant.res -lang/zh_Hant_TW.res -lang/zh_TW.res -likelySubtags.res -metaZones.res -nb.res -nfc.nrm -nfkc.nrm -nfkc_cf.nrm -nl.res -no.res -numberingSystems.res -pl.res -plurals.res -pnames.icu -pool.res -pt.res -pt_BR.res -pt_PT.res -rbnf/da.res -rbnf/de.res -rbnf/en.res -rbnf/es.res -rbnf/fi.res -rbnf/fr.res -rbnf/it.res -rbnf/ja.res -rbnf/ko.res -rbnf/nb.res -rbnf/nl.res -rbnf/pl.res -rbnf/pt.res -rbnf/pt_PT.res -rbnf/res_index.res -rbnf/root.res -rbnf/ru.res -rbnf/sv.res -rbnf/zh.res -rbnf/zh_Hant.res -region/da.res -region/de.res -region/en.res -region/es.res -region/fi.res -region/fr.res -region/it.res -region/ja.res -region/ko.res -region/nb.res -region/nl.res -region/no.res -region/pl.res -region/pool.res -region/pt.res -region/pt_PT.res -region/root.res -region/ru.res -region/sv.res -region/zh.res -region/zh_CN.res -region/zh_Hans.res -region/zh_Hans_CN.res -region/zh_Hant.res -region/zh_Hant_TW.res -region/zh_TW.res -res_index.res -rfc3491.spp -root.res -ru.res -supplementalData.res -sv.res -timezoneTypes.res -unames.icu -uts46.nrm -windows-874-2000.cnv -windows-950-2000.cnv -windowsZones.res -zh.res -zh_CN.res -zh_Hans.res -zh_Hans_CN.res -zh_Hant.res -zh_Hant_TW.res -zh_TW.res -zone/da.res -zone/de.res -zone/en.res -zone/en_GB.res -zone/es.res -zone/fi.res -zone/fr.res -zone/it.res -zone/ja.res -zone/ko.res -zone/nb.res -zone/nl.res -zone/no.res -zone/pl.res -zone/pool.res -zone/pt.res -zone/pt_PT.res -zone/root.res -zone/ru.res -zone/sv.res -zone/zh.res -zone/zh_CN.res -zone/zh_Hans.res -zone/zh_Hans_CN.res -zone/zh_Hant.res -zone/zh_Hant_TW.res -zone/zh_TW.res -zoneinfo64.res
diff --git a/src/cobalt/content/icu/icudata_linux.lst b/src/cobalt/content/icu/icudata_linux.lst deleted file mode 100644 index ae20b1e..0000000 --- a/src/cobalt/content/icu/icudata_linux.lst +++ /dev/null
@@ -1,230 +0,0 @@ -brkitr/char.brk -brkitr/en.res -brkitr/en_US.res -brkitr/fi.res -brkitr/ja.res -brkitr/line.brk -brkitr/line_fi.brk -brkitr/res_index.res -brkitr/root.res -brkitr/sent.brk -brkitr/thaidict.ctd -brkitr/title.brk -brkitr/word.brk -brkitr/word_ja.brk -cnvalias.icu -coll/da.res -coll/de.res -coll/en.res -coll/en_GB.res -coll/en_US.res -coll/es.res -coll/fi.res -coll/fr.res -coll/invuca.icu -coll/it.res -coll/ja.res -coll/ko.res -coll/nb.res -coll/nl.res -coll/pl.res -coll/pt.res -coll/pt_BR.res -coll/pt_PT.res -coll/res_index.res -coll/root.res -coll/ru.res -coll/sv.res -coll/ucadata.icu -coll/zh.res -coll/zh_Hans.res -coll/zh_Hans_CN.res -coll/zh_Hant.res -coll/zh_Hant_TW.res -confusables.cfu -curr/da.res -curr/de.res -curr/en.res -curr/es.res -curr/fi.res -curr/fr.res -curr/it.res -curr/ja.res -curr/ko.res -curr/nb.res -curr/nl.res -curr/no.res -curr/pl.res -curr/pool.res -curr/pt.res -curr/pt_PT.res -curr/root.res -curr/ru.res -curr/sv.res -curr/zh.res -curr/zh_CN.res -curr/zh_Hans.res -curr/zh_Hans_CN.res -curr/zh_Hant.res -curr/zh_Hant_TW.res -curr/zh_TW.res -da.res -de.res -en.res -en_GB.res -en_US.res -es.res -fi.res -fr.res -gb18030.cnv -ibm-1089_P100-1995.cnv -ibm-1373_P100-2002.cnv -ibm-1383_P110-1999.cnv -ibm-33722_P12A_P12A-2004_U2.cnv -ibm-5354_P100-1998.cnv -ibm-878_P100-1996.cnv -ibm-9005_X110-2007.cnv -ibm-943_P15A-2003.cnv -ibm-9447_P100-2002.cnv -ibm-970_P110_P110-2006_U2.cnv -icustd.res -icuver.res -it.res -ja.res -keyTypeData.res -ko.res -lang/da.res -lang/de.res -lang/en.res -lang/es.res -lang/fi.res -lang/fr.res -lang/it.res -lang/ja.res -lang/ko.res -lang/nb.res -lang/nl.res -lang/no.res -lang/pl.res -lang/pool.res -lang/pt.res -lang/pt_PT.res -lang/root.res -lang/ru.res -lang/sv.res -lang/zh.res -lang/zh_CN.res -lang/zh_Hans.res -lang/zh_Hans_CN.res -lang/zh_Hant.res -lang/zh_Hant_TW.res -lang/zh_TW.res -likelySubtags.res -metaZones.res -nb.res -nfc.nrm -nfkc.nrm -nfkc_cf.nrm -nl.res -no.res -numberingSystems.res -pl.res -plurals.res -pnames.icu -pool.res -pt.res -pt_BR.res -pt_PT.res -rbnf/da.res -rbnf/de.res -rbnf/en.res -rbnf/es.res -rbnf/fi.res -rbnf/fr.res -rbnf/it.res -rbnf/ja.res -rbnf/ko.res -rbnf/nb.res -rbnf/nl.res -rbnf/pl.res -rbnf/pt.res -rbnf/pt_PT.res -rbnf/res_index.res -rbnf/root.res -rbnf/ru.res -rbnf/sv.res -rbnf/zh.res -rbnf/zh_Hant.res -region/da.res -region/de.res -region/en.res -region/es.res -region/fi.res -region/fr.res -region/it.res -region/ja.res -region/ko.res -region/nb.res -region/nl.res -region/no.res -region/pl.res -region/pool.res -region/pt.res -region/pt_PT.res -region/root.res -region/ru.res -region/sv.res -region/zh.res -region/zh_CN.res -region/zh_Hans.res -region/zh_Hans_CN.res -region/zh_Hant.res -region/zh_Hant_TW.res -region/zh_TW.res -res_index.res -rfc3491.spp -root.res -ru.res -supplementalData.res -sv.res -timezoneTypes.res -unames.icu -uts46.nrm -windows-874-2000.cnv -windows-950-2000.cnv -windowsZones.res -zh.res -zh_CN.res -zh_Hans.res -zh_Hans_CN.res -zh_Hant.res -zh_Hant_TW.res -zh_TW.res -zone/da.res -zone/de.res -zone/en.res -zone/en_GB.res -zone/es.res -zone/fi.res -zone/fr.res -zone/it.res -zone/ja.res -zone/ko.res -zone/nb.res -zone/nl.res -zone/no.res -zone/pl.res -zone/pool.res -zone/pt.res -zone/pt_PT.res -zone/root.res -zone/ru.res -zone/sv.res -zone/zh.res -zone/zh_CN.res -zone/zh_Hans.res -zone/zh_Hans_CN.res -zone/zh_Hant.res -zone/zh_Hant_TW.res -zone/zh_TW.res -zoneinfo64.res
diff --git a/src/cobalt/content/icu/icudt56b/af.res b/src/cobalt/content/icu/icudt56b/af.res index b1d9054..284d6c5 100644 --- a/src/cobalt/content/icu/icudt56b/af.res +++ b/src/cobalt/content/icu/icudt56b/af.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ak.res b/src/cobalt/content/icu/icudt56b/ak.res index cceee96..27239e7 100644 --- a/src/cobalt/content/icu/icudt56b/ak.res +++ b/src/cobalt/content/icu/icudt56b/ak.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/am.res b/src/cobalt/content/icu/icudt56b/am.res index 0bd9037..81d2671 100644 --- a/src/cobalt/content/icu/icudt56b/am.res +++ b/src/cobalt/content/icu/icudt56b/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/an.res b/src/cobalt/content/icu/icudt56b/an.res index 3a6ec3e..f7fe9ba 100644 --- a/src/cobalt/content/icu/icudt56b/an.res +++ b/src/cobalt/content/icu/icudt56b/an.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ar.res b/src/cobalt/content/icu/icudt56b/ar.res index adf9eae..99cbf2a 100644 --- a/src/cobalt/content/icu/icudt56b/ar.res +++ b/src/cobalt/content/icu/icudt56b/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ast.res b/src/cobalt/content/icu/icudt56b/ast.res index 49ffb94..62b23e3 100644 --- a/src/cobalt/content/icu/icudt56b/ast.res +++ b/src/cobalt/content/icu/icudt56b/ast.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/az.res b/src/cobalt/content/icu/icudt56b/az.res index 1154cd7..900086d 100644 --- a/src/cobalt/content/icu/icudt56b/az.res +++ b/src/cobalt/content/icu/icudt56b/az.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/be.res b/src/cobalt/content/icu/icudt56b/be.res index b1d5c70..9717219 100644 --- a/src/cobalt/content/icu/icudt56b/be.res +++ b/src/cobalt/content/icu/icudt56b/be.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bem.res b/src/cobalt/content/icu/icudt56b/bem.res index bf4be4b..34efeb9 100644 --- a/src/cobalt/content/icu/icudt56b/bem.res +++ b/src/cobalt/content/icu/icudt56b/bem.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bg.res b/src/cobalt/content/icu/icudt56b/bg.res index 9278fe9..f15f52e 100644 --- a/src/cobalt/content/icu/icudt56b/bg.res +++ b/src/cobalt/content/icu/icudt56b/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bn.res b/src/cobalt/content/icu/icudt56b/bn.res index 76a84b8..d002c6d 100644 --- a/src/cobalt/content/icu/icudt56b/bn.res +++ b/src/cobalt/content/icu/icudt56b/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/br.res b/src/cobalt/content/icu/icudt56b/br.res index 49cf07d..9fd2d85 100644 --- a/src/cobalt/content/icu/icudt56b/br.res +++ b/src/cobalt/content/icu/icudt56b/br.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/bs.res b/src/cobalt/content/icu/icudt56b/bs.res index 6244431..beca030 100644 --- a/src/cobalt/content/icu/icudt56b/bs.res +++ b/src/cobalt/content/icu/icudt56b/bs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ca.res b/src/cobalt/content/icu/icudt56b/ca.res index 77bf740..cd9c556 100644 --- a/src/cobalt/content/icu/icudt56b/ca.res +++ b/src/cobalt/content/icu/icudt56b/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ckb.res b/src/cobalt/content/icu/icudt56b/ckb.res index 7faa641..309e301 100644 --- a/src/cobalt/content/icu/icudt56b/ckb.res +++ b/src/cobalt/content/icu/icudt56b/ckb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ar.res b/src/cobalt/content/icu/icudt56b/coll/ar.res index 8bd55fd..2535ac9 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ar.res +++ b/src/cobalt/content/icu/icudt56b/coll/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/bg.res b/src/cobalt/content/icu/icudt56b/coll/bg.res index 869c575..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/bg.res +++ b/src/cobalt/content/icu/icudt56b/coll/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/bn.res b/src/cobalt/content/icu/icudt56b/coll/bn.res index b4d18d5..17f10ff 100644 --- a/src/cobalt/content/icu/icudt56b/coll/bn.res +++ b/src/cobalt/content/icu/icudt56b/coll/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ca.res b/src/cobalt/content/icu/icudt56b/coll/ca.res index 55c6cf7..21c7b5c 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ca.res +++ b/src/cobalt/content/icu/icudt56b/coll/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/cs.res b/src/cobalt/content/icu/icudt56b/coll/cs.res index 96090e9..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/cs.res +++ b/src/cobalt/content/icu/icudt56b/coll/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/da.res b/src/cobalt/content/icu/icudt56b/coll/da.res index 6d6a1e6..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/da.res +++ b/src/cobalt/content/icu/icudt56b/coll/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/de.res b/src/cobalt/content/icu/icudt56b/coll/de.res index 6cbffd1..0af8d4a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/de.res +++ b/src/cobalt/content/icu/icudt56b/coll/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/de_AT.res b/src/cobalt/content/icu/icudt56b/coll/de_AT.res index e157e2d..032fc75 100644 --- a/src/cobalt/content/icu/icudt56b/coll/de_AT.res +++ b/src/cobalt/content/icu/icudt56b/coll/de_AT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/el.res b/src/cobalt/content/icu/icudt56b/coll/el.res index a6d79ba..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/el.res +++ b/src/cobalt/content/icu/icudt56b/coll/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/es.res b/src/cobalt/content/icu/icudt56b/coll/es.res index 3e4f4cd..41f43af 100644 --- a/src/cobalt/content/icu/icudt56b/coll/es.res +++ b/src/cobalt/content/icu/icudt56b/coll/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/et.res b/src/cobalt/content/icu/icudt56b/coll/et.res index 5b86126..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/et.res +++ b/src/cobalt/content/icu/icudt56b/coll/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fa.res b/src/cobalt/content/icu/icudt56b/coll/fa.res index 7deab50..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/fa.res +++ b/src/cobalt/content/icu/icudt56b/coll/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fi.res b/src/cobalt/content/icu/icudt56b/coll/fi.res index 49a7a34..41f43af 100644 --- a/src/cobalt/content/icu/icudt56b/coll/fi.res +++ b/src/cobalt/content/icu/icudt56b/coll/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fil.res b/src/cobalt/content/icu/icudt56b/coll/fil.res index e1f7ec5..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/fil.res +++ b/src/cobalt/content/icu/icudt56b/coll/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/fr_CA.res b/src/cobalt/content/icu/icudt56b/coll/fr_CA.res index 82e6d81..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/fr_CA.res +++ b/src/cobalt/content/icu/icudt56b/coll/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/gu.res b/src/cobalt/content/icu/icudt56b/coll/gu.res index 49bb592..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/gu.res +++ b/src/cobalt/content/icu/icudt56b/coll/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/he.res b/src/cobalt/content/icu/icudt56b/coll/he.res index c74874f..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/he.res +++ b/src/cobalt/content/icu/icudt56b/coll/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/hi.res b/src/cobalt/content/icu/icudt56b/coll/hi.res index 67f3464..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/hi.res +++ b/src/cobalt/content/icu/icudt56b/coll/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/hr.res b/src/cobalt/content/icu/icudt56b/coll/hr.res index 157fc6e..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/hr.res +++ b/src/cobalt/content/icu/icudt56b/coll/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/hu.res b/src/cobalt/content/icu/icudt56b/coll/hu.res index 6f1d185..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/hu.res +++ b/src/cobalt/content/icu/icudt56b/coll/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ja.res b/src/cobalt/content/icu/icudt56b/coll/ja.res index f713c01..07694e1 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ja.res +++ b/src/cobalt/content/icu/icudt56b/coll/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/kn.res b/src/cobalt/content/icu/icudt56b/coll/kn.res index 998784d..17f10ff 100644 --- a/src/cobalt/content/icu/icudt56b/coll/kn.res +++ b/src/cobalt/content/icu/icudt56b/coll/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ko.res b/src/cobalt/content/icu/icudt56b/coll/ko.res index c3bbcb6..4d0bb22 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ko.res +++ b/src/cobalt/content/icu/icudt56b/coll/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/lt.res b/src/cobalt/content/icu/icudt56b/coll/lt.res index ac6e4f8..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/lt.res +++ b/src/cobalt/content/icu/icudt56b/coll/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/lv.res b/src/cobalt/content/icu/icudt56b/coll/lv.res index 5827c9a..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/lv.res +++ b/src/cobalt/content/icu/icudt56b/coll/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ml.res b/src/cobalt/content/icu/icudt56b/coll/ml.res index 98a0b6b..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ml.res +++ b/src/cobalt/content/icu/icudt56b/coll/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/mr.res b/src/cobalt/content/icu/icudt56b/coll/mr.res index 3538c54..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/mr.res +++ b/src/cobalt/content/icu/icudt56b/coll/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/nb.res b/src/cobalt/content/icu/icudt56b/coll/nb.res index f567163..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/nb.res +++ b/src/cobalt/content/icu/icudt56b/coll/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/nn.res b/src/cobalt/content/icu/icudt56b/coll/nn.res index f567163..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/nn.res +++ b/src/cobalt/content/icu/icudt56b/coll/nn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/pl.res b/src/cobalt/content/icu/icudt56b/coll/pl.res index fabe651..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/pl.res +++ b/src/cobalt/content/icu/icudt56b/coll/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ro.res b/src/cobalt/content/icu/icudt56b/coll/ro.res index 1e28918..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ro.res +++ b/src/cobalt/content/icu/icudt56b/coll/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/root.res b/src/cobalt/content/icu/icudt56b/coll/root.res index b3749b7..47912c6 100644 --- a/src/cobalt/content/icu/icudt56b/coll/root.res +++ b/src/cobalt/content/icu/icudt56b/coll/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ru.res b/src/cobalt/content/icu/icudt56b/coll/ru.res index 869c575..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ru.res +++ b/src/cobalt/content/icu/icudt56b/coll/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sk.res b/src/cobalt/content/icu/icudt56b/coll/sk.res index 05a3caa..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/sk.res +++ b/src/cobalt/content/icu/icudt56b/coll/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sl.res b/src/cobalt/content/icu/icudt56b/coll/sl.res index 52c6055..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/sl.res +++ b/src/cobalt/content/icu/icudt56b/coll/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sr.res b/src/cobalt/content/icu/icudt56b/coll/sr.res index 36536db..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/sr.res +++ b/src/cobalt/content/icu/icudt56b/coll/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res b/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res index 157fc6e..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56b/coll/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/sv.res b/src/cobalt/content/icu/icudt56b/coll/sv.res index 92d6887..90c4801 100644 --- a/src/cobalt/content/icu/icudt56b/coll/sv.res +++ b/src/cobalt/content/icu/icudt56b/coll/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/ta.res b/src/cobalt/content/icu/icudt56b/coll/ta.res index c7c7bc5..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/ta.res +++ b/src/cobalt/content/icu/icudt56b/coll/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/te.res b/src/cobalt/content/icu/icudt56b/coll/te.res index c046b2a..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/te.res +++ b/src/cobalt/content/icu/icudt56b/coll/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/th.res b/src/cobalt/content/icu/icudt56b/coll/th.res index 454ddb0..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/th.res +++ b/src/cobalt/content/icu/icudt56b/coll/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/tr.res b/src/cobalt/content/icu/icudt56b/coll/tr.res index f38e549..30dd56e 100644 --- a/src/cobalt/content/icu/icudt56b/coll/tr.res +++ b/src/cobalt/content/icu/icudt56b/coll/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/uk.res b/src/cobalt/content/icu/icudt56b/coll/uk.res index 6503052..c317e0a 100644 --- a/src/cobalt/content/icu/icudt56b/coll/uk.res +++ b/src/cobalt/content/icu/icudt56b/coll/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/vi.res b/src/cobalt/content/icu/icudt56b/coll/vi.res index 6a66847..17f10ff 100644 --- a/src/cobalt/content/icu/icudt56b/coll/vi.res +++ b/src/cobalt/content/icu/icudt56b/coll/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/coll/zh.res b/src/cobalt/content/icu/icudt56b/coll/zh.res index ebdecdf..ac8e0eb 100644 --- a/src/cobalt/content/icu/icudt56b/coll/zh.res +++ b/src/cobalt/content/icu/icudt56b/coll/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/cs.res b/src/cobalt/content/icu/icudt56b/cs.res index 4a98bce..5d830fd 100644 --- a/src/cobalt/content/icu/icudt56b/cs.res +++ b/src/cobalt/content/icu/icudt56b/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/am.res b/src/cobalt/content/icu/icudt56b/curr/am.res index 38e80e7..d03272b 100644 --- a/src/cobalt/content/icu/icudt56b/curr/am.res +++ b/src/cobalt/content/icu/icudt56b/curr/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ar.res b/src/cobalt/content/icu/icudt56b/curr/ar.res index fb21df4..98164d9 100644 --- a/src/cobalt/content/icu/icudt56b/curr/ar.res +++ b/src/cobalt/content/icu/icudt56b/curr/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/bg.res b/src/cobalt/content/icu/icudt56b/curr/bg.res index 1b9fde0..4342e4b 100644 --- a/src/cobalt/content/icu/icudt56b/curr/bg.res +++ b/src/cobalt/content/icu/icudt56b/curr/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ca.res b/src/cobalt/content/icu/icudt56b/curr/ca.res index 51c117a..0586b88 100644 --- a/src/cobalt/content/icu/icudt56b/curr/ca.res +++ b/src/cobalt/content/icu/icudt56b/curr/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/cs.res b/src/cobalt/content/icu/icudt56b/curr/cs.res index fb87c8b..8c7b25b 100644 --- a/src/cobalt/content/icu/icudt56b/curr/cs.res +++ b/src/cobalt/content/icu/icudt56b/curr/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/da.res b/src/cobalt/content/icu/icudt56b/curr/da.res index 4150d3e..5e1633e 100644 --- a/src/cobalt/content/icu/icudt56b/curr/da.res +++ b/src/cobalt/content/icu/icudt56b/curr/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/de.res b/src/cobalt/content/icu/icudt56b/curr/de.res index 18ab163..ea5ac0d 100644 --- a/src/cobalt/content/icu/icudt56b/curr/de.res +++ b/src/cobalt/content/icu/icudt56b/curr/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/de_CH.res b/src/cobalt/content/icu/icudt56b/curr/de_CH.res index f3ae405..3b58f47 100644 --- a/src/cobalt/content/icu/icudt56b/curr/de_CH.res +++ b/src/cobalt/content/icu/icudt56b/curr/de_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/el.res b/src/cobalt/content/icu/icudt56b/curr/el.res index 97e80e0..65496d2 100644 --- a/src/cobalt/content/icu/icudt56b/curr/el.res +++ b/src/cobalt/content/icu/icudt56b/curr/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en.res b/src/cobalt/content/icu/icudt56b/curr/en.res index d7ed88f..f56ebfd 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en.res +++ b/src/cobalt/content/icu/icudt56b/curr/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_001.res b/src/cobalt/content/icu/icudt56b/curr/en_001.res index 291eb3c..eff5ebd 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_001.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_150.res b/src/cobalt/content/icu/icudt56b/curr/en_150.res index cec5a7c..aca0bbd 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_150.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_AU.res b/src/cobalt/content/icu/icudt56b/curr/en_AU.res index b3caf09..e641c63 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_AU.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_CA.res b/src/cobalt/content/icu/icudt56b/curr/en_CA.res index f4cd95b..d9f5a75 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_CA.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_GB.res b/src/cobalt/content/icu/icudt56b/curr/en_GB.res index 9f0e72a..8ba46c9 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_GB.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_IN.res b/src/cobalt/content/icu/icudt56b/curr/en_IN.res index a6ed044..29c193d 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_IN.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_NZ.res b/src/cobalt/content/icu/icudt56b/curr/en_NZ.res index ba6d617..86fa398 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_NZ.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/en_ZA.res b/src/cobalt/content/icu/icudt56b/curr/en_ZA.res index c182fea..1180613 100644 --- a/src/cobalt/content/icu/icudt56b/curr/en_ZA.res +++ b/src/cobalt/content/icu/icudt56b/curr/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es.res b/src/cobalt/content/icu/icudt56b/curr/es.res index 7a95655..381198a 100644 --- a/src/cobalt/content/icu/icudt56b/curr/es.res +++ b/src/cobalt/content/icu/icudt56b/curr/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_419.res b/src/cobalt/content/icu/icudt56b/curr/es_419.res index 7f4d660..9dc0fab 100644 --- a/src/cobalt/content/icu/icudt56b/curr/es_419.res +++ b/src/cobalt/content/icu/icudt56b/curr/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_AR.res b/src/cobalt/content/icu/icudt56b/curr/es_AR.res index debc621..16f648e 100644 --- a/src/cobalt/content/icu/icudt56b/curr/es_AR.res +++ b/src/cobalt/content/icu/icudt56b/curr/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_MX.res b/src/cobalt/content/icu/icudt56b/curr/es_MX.res index 5be672f..51f4c08 100644 --- a/src/cobalt/content/icu/icudt56b/curr/es_MX.res +++ b/src/cobalt/content/icu/icudt56b/curr/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/es_US.res b/src/cobalt/content/icu/icudt56b/curr/es_US.res index ac708dc..3968033 100644 --- a/src/cobalt/content/icu/icudt56b/curr/es_US.res +++ b/src/cobalt/content/icu/icudt56b/curr/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fa.res b/src/cobalt/content/icu/icudt56b/curr/fa.res index 776ac57..af94bfe 100644 --- a/src/cobalt/content/icu/icudt56b/curr/fa.res +++ b/src/cobalt/content/icu/icudt56b/curr/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fi.res b/src/cobalt/content/icu/icudt56b/curr/fi.res index 0a4deea..3b8a6bf 100644 --- a/src/cobalt/content/icu/icudt56b/curr/fi.res +++ b/src/cobalt/content/icu/icudt56b/curr/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fil.res b/src/cobalt/content/icu/icudt56b/curr/fil.res index 5b7dfb5..51309f4 100644 --- a/src/cobalt/content/icu/icudt56b/curr/fil.res +++ b/src/cobalt/content/icu/icudt56b/curr/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fr.res b/src/cobalt/content/icu/icudt56b/curr/fr.res index 0db2683..97ef8fa 100644 --- a/src/cobalt/content/icu/icudt56b/curr/fr.res +++ b/src/cobalt/content/icu/icudt56b/curr/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/fr_CA.res b/src/cobalt/content/icu/icudt56b/curr/fr_CA.res index 44e1b23..42c1269 100644 --- a/src/cobalt/content/icu/icudt56b/curr/fr_CA.res +++ b/src/cobalt/content/icu/icudt56b/curr/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/he.res b/src/cobalt/content/icu/icudt56b/curr/he.res index f0539b4..9f4899e 100644 --- a/src/cobalt/content/icu/icudt56b/curr/he.res +++ b/src/cobalt/content/icu/icudt56b/curr/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/hi.res b/src/cobalt/content/icu/icudt56b/curr/hi.res index 5522f67..6daffbb 100644 --- a/src/cobalt/content/icu/icudt56b/curr/hi.res +++ b/src/cobalt/content/icu/icudt56b/curr/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/hr.res b/src/cobalt/content/icu/icudt56b/curr/hr.res index dbbf434..bd52f65 100644 --- a/src/cobalt/content/icu/icudt56b/curr/hr.res +++ b/src/cobalt/content/icu/icudt56b/curr/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/hu.res b/src/cobalt/content/icu/icudt56b/curr/hu.res index 8e4dc16..ebc0000 100644 --- a/src/cobalt/content/icu/icudt56b/curr/hu.res +++ b/src/cobalt/content/icu/icudt56b/curr/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/id.res b/src/cobalt/content/icu/icudt56b/curr/id.res index 4e32144..7955ab5 100644 --- a/src/cobalt/content/icu/icudt56b/curr/id.res +++ b/src/cobalt/content/icu/icudt56b/curr/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/in.res b/src/cobalt/content/icu/icudt56b/curr/in.res index 50826b6..12a327a 100644 --- a/src/cobalt/content/icu/icudt56b/curr/in.res +++ b/src/cobalt/content/icu/icudt56b/curr/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/it.res b/src/cobalt/content/icu/icudt56b/curr/it.res index 8e8c66b..f5fd979 100644 --- a/src/cobalt/content/icu/icudt56b/curr/it.res +++ b/src/cobalt/content/icu/icudt56b/curr/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/iw.res b/src/cobalt/content/icu/icudt56b/curr/iw.res index bd7ea47..e1db668 100644 --- a/src/cobalt/content/icu/icudt56b/curr/iw.res +++ b/src/cobalt/content/icu/icudt56b/curr/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ja.res b/src/cobalt/content/icu/icudt56b/curr/ja.res index f0c7c85..aaf9db9 100644 --- a/src/cobalt/content/icu/icudt56b/curr/ja.res +++ b/src/cobalt/content/icu/icudt56b/curr/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ko.res b/src/cobalt/content/icu/icudt56b/curr/ko.res index e67daf0..80bec29 100644 --- a/src/cobalt/content/icu/icudt56b/curr/ko.res +++ b/src/cobalt/content/icu/icudt56b/curr/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/lt.res b/src/cobalt/content/icu/icudt56b/curr/lt.res index 53354e7..3f89f8e 100644 --- a/src/cobalt/content/icu/icudt56b/curr/lt.res +++ b/src/cobalt/content/icu/icudt56b/curr/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/lv.res b/src/cobalt/content/icu/icudt56b/curr/lv.res index 7dee64c..f1119e4 100644 --- a/src/cobalt/content/icu/icudt56b/curr/lv.res +++ b/src/cobalt/content/icu/icudt56b/curr/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/nb.res b/src/cobalt/content/icu/icudt56b/curr/nb.res index 04ac59c..8ac97dc 100644 --- a/src/cobalt/content/icu/icudt56b/curr/nb.res +++ b/src/cobalt/content/icu/icudt56b/curr/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/nl.res b/src/cobalt/content/icu/icudt56b/curr/nl.res index ea0bd1d..9d5d453 100644 --- a/src/cobalt/content/icu/icudt56b/curr/nl.res +++ b/src/cobalt/content/icu/icudt56b/curr/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/no.res b/src/cobalt/content/icu/icudt56b/curr/no.res index 3d7fe4c..6772320 100644 --- a/src/cobalt/content/icu/icudt56b/curr/no.res +++ b/src/cobalt/content/icu/icudt56b/curr/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pl.res b/src/cobalt/content/icu/icudt56b/curr/pl.res index 220049f..2c6ea20 100644 --- a/src/cobalt/content/icu/icudt56b/curr/pl.res +++ b/src/cobalt/content/icu/icudt56b/curr/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pool.res b/src/cobalt/content/icu/icudt56b/curr/pool.res index 7d84f6c..7a0f86d 100644 --- a/src/cobalt/content/icu/icudt56b/curr/pool.res +++ b/src/cobalt/content/icu/icudt56b/curr/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pt.res b/src/cobalt/content/icu/icudt56b/curr/pt.res index d4a9a4d..14659a9 100644 --- a/src/cobalt/content/icu/icudt56b/curr/pt.res +++ b/src/cobalt/content/icu/icudt56b/curr/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/pt_PT.res b/src/cobalt/content/icu/icudt56b/curr/pt_PT.res index 70ff325..d469d8f 100644 --- a/src/cobalt/content/icu/icudt56b/curr/pt_PT.res +++ b/src/cobalt/content/icu/icudt56b/curr/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ro.res b/src/cobalt/content/icu/icudt56b/curr/ro.res index 3916026..d3a5d1e 100644 --- a/src/cobalt/content/icu/icudt56b/curr/ro.res +++ b/src/cobalt/content/icu/icudt56b/curr/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/root.res b/src/cobalt/content/icu/icudt56b/curr/root.res index 1c39d46..1161352 100644 --- a/src/cobalt/content/icu/icudt56b/curr/root.res +++ b/src/cobalt/content/icu/icudt56b/curr/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/ru.res b/src/cobalt/content/icu/icudt56b/curr/ru.res index 0eb467b..80681bb 100644 --- a/src/cobalt/content/icu/icudt56b/curr/ru.res +++ b/src/cobalt/content/icu/icudt56b/curr/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sk.res b/src/cobalt/content/icu/icudt56b/curr/sk.res index e09c767..7b3ff60 100644 --- a/src/cobalt/content/icu/icudt56b/curr/sk.res +++ b/src/cobalt/content/icu/icudt56b/curr/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sl.res b/src/cobalt/content/icu/icudt56b/curr/sl.res index fadcb69..62dac74 100644 --- a/src/cobalt/content/icu/icudt56b/curr/sl.res +++ b/src/cobalt/content/icu/icudt56b/curr/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sr.res b/src/cobalt/content/icu/icudt56b/curr/sr.res index 3d7500e..bd0f5f9 100644 --- a/src/cobalt/content/icu/icudt56b/curr/sr.res +++ b/src/cobalt/content/icu/icudt56b/curr/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/supplementalData.res b/src/cobalt/content/icu/icudt56b/curr/supplementalData.res index 6f8b6fb..40ea0ed 100644 --- a/src/cobalt/content/icu/icudt56b/curr/supplementalData.res +++ b/src/cobalt/content/icu/icudt56b/curr/supplementalData.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sv.res b/src/cobalt/content/icu/icudt56b/curr/sv.res index 7f80b65..a408a3d 100644 --- a/src/cobalt/content/icu/icudt56b/curr/sv.res +++ b/src/cobalt/content/icu/icudt56b/curr/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/sw.res b/src/cobalt/content/icu/icudt56b/curr/sw.res index 6a8395e..54865e7 100644 --- a/src/cobalt/content/icu/icudt56b/curr/sw.res +++ b/src/cobalt/content/icu/icudt56b/curr/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/th.res b/src/cobalt/content/icu/icudt56b/curr/th.res index af7f775..53ada41 100644 --- a/src/cobalt/content/icu/icudt56b/curr/th.res +++ b/src/cobalt/content/icu/icudt56b/curr/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/tl.res b/src/cobalt/content/icu/icudt56b/curr/tl.res index 4c27952..d6dc867 100644 --- a/src/cobalt/content/icu/icudt56b/curr/tl.res +++ b/src/cobalt/content/icu/icudt56b/curr/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/tr.res b/src/cobalt/content/icu/icudt56b/curr/tr.res index 486b255..4a5350f 100644 --- a/src/cobalt/content/icu/icudt56b/curr/tr.res +++ b/src/cobalt/content/icu/icudt56b/curr/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/uk.res b/src/cobalt/content/icu/icudt56b/curr/uk.res index 7ff314f..d5614a7 100644 --- a/src/cobalt/content/icu/icudt56b/curr/uk.res +++ b/src/cobalt/content/icu/icudt56b/curr/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/vi.res b/src/cobalt/content/icu/icudt56b/curr/vi.res index f0bd3b4..05268ae 100644 --- a/src/cobalt/content/icu/icudt56b/curr/vi.res +++ b/src/cobalt/content/icu/icudt56b/curr/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh.res b/src/cobalt/content/icu/icudt56b/curr/zh.res index a5e638b..2408d07 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_CN.res b/src/cobalt/content/icu/icudt56b/curr/zh_CN.res index 2509851..27d3f68 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_CN.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_HK.res b/src/cobalt/content/icu/icudt56b/curr/zh_HK.res index f28f2ae..a73cf4b 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_HK.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res index 4a3ea50..8e70ff1 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res index 2e50d66..f4a45c8 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res index 557c60c..6d3a2fc 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res index 9e2be04..c548a56 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res index c5d17b5..e2400f9 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res index 2e50d66..f4a45c8 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_SG.res b/src/cobalt/content/icu/icudt56b/curr/zh_SG.res index 99a36d3..b14dc1b 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_SG.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/curr/zh_TW.res b/src/cobalt/content/icu/icudt56b/curr/zh_TW.res index 9f762c8..f2809d3 100644 --- a/src/cobalt/content/icu/icudt56b/curr/zh_TW.res +++ b/src/cobalt/content/icu/icudt56b/curr/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/cy.res b/src/cobalt/content/icu/icudt56b/cy.res index 1d9f4f8..c95f86c 100644 --- a/src/cobalt/content/icu/icudt56b/cy.res +++ b/src/cobalt/content/icu/icudt56b/cy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/da.res b/src/cobalt/content/icu/icudt56b/da.res index b395a15..a3de9c7 100644 --- a/src/cobalt/content/icu/icudt56b/da.res +++ b/src/cobalt/content/icu/icudt56b/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/de.res b/src/cobalt/content/icu/icudt56b/de.res index 1d8c9c0..e7fe508 100644 --- a/src/cobalt/content/icu/icudt56b/de.res +++ b/src/cobalt/content/icu/icudt56b/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/de_AT.res b/src/cobalt/content/icu/icudt56b/de_AT.res index 5774578..c92705d 100644 --- a/src/cobalt/content/icu/icudt56b/de_AT.res +++ b/src/cobalt/content/icu/icudt56b/de_AT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/de_CH.res b/src/cobalt/content/icu/icudt56b/de_CH.res index df893d0..469e876 100644 --- a/src/cobalt/content/icu/icudt56b/de_CH.res +++ b/src/cobalt/content/icu/icudt56b/de_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ee.res b/src/cobalt/content/icu/icudt56b/ee.res index 9eac1a6..4e2f32e 100644 --- a/src/cobalt/content/icu/icudt56b/ee.res +++ b/src/cobalt/content/icu/icudt56b/ee.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/el.res b/src/cobalt/content/icu/icudt56b/el.res index 00123ec..b9153f6 100644 --- a/src/cobalt/content/icu/icudt56b/el.res +++ b/src/cobalt/content/icu/icudt56b/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en.res b/src/cobalt/content/icu/icudt56b/en.res index 76a284b..68d6647 100644 --- a/src/cobalt/content/icu/icudt56b/en.res +++ b/src/cobalt/content/icu/icudt56b/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_001.res b/src/cobalt/content/icu/icudt56b/en_001.res index bffa753..4873c68 100644 --- a/src/cobalt/content/icu/icudt56b/en_001.res +++ b/src/cobalt/content/icu/icudt56b/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_150.res b/src/cobalt/content/icu/icudt56b/en_150.res index 1c3c688..0ee0565 100644 --- a/src/cobalt/content/icu/icudt56b/en_150.res +++ b/src/cobalt/content/icu/icudt56b/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_AU.res b/src/cobalt/content/icu/icudt56b/en_AU.res index d91db86..46f72cc 100644 --- a/src/cobalt/content/icu/icudt56b/en_AU.res +++ b/src/cobalt/content/icu/icudt56b/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_CA.res b/src/cobalt/content/icu/icudt56b/en_CA.res index f399bd6..3f627db 100644 --- a/src/cobalt/content/icu/icudt56b/en_CA.res +++ b/src/cobalt/content/icu/icudt56b/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_GB.res b/src/cobalt/content/icu/icudt56b/en_GB.res index 8a06e8c..b24b84e 100644 --- a/src/cobalt/content/icu/icudt56b/en_GB.res +++ b/src/cobalt/content/icu/icudt56b/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_IN.res b/src/cobalt/content/icu/icudt56b/en_IN.res index 89b03dc..f26ad6d 100644 --- a/src/cobalt/content/icu/icudt56b/en_IN.res +++ b/src/cobalt/content/icu/icudt56b/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_NZ.res b/src/cobalt/content/icu/icudt56b/en_NZ.res index bf1edbf..cfeff38 100644 --- a/src/cobalt/content/icu/icudt56b/en_NZ.res +++ b/src/cobalt/content/icu/icudt56b/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_US.res b/src/cobalt/content/icu/icudt56b/en_US.res index 0c29168..7a2eb6d 100644 --- a/src/cobalt/content/icu/icudt56b/en_US.res +++ b/src/cobalt/content/icu/icudt56b/en_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/en_ZA.res b/src/cobalt/content/icu/icudt56b/en_ZA.res index 93a8bfd..1cab436 100644 --- a/src/cobalt/content/icu/icudt56b/en_ZA.res +++ b/src/cobalt/content/icu/icudt56b/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/eo.res b/src/cobalt/content/icu/icudt56b/eo.res index 2e26830..d519476 100644 --- a/src/cobalt/content/icu/icudt56b/eo.res +++ b/src/cobalt/content/icu/icudt56b/eo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es.res b/src/cobalt/content/icu/icudt56b/es.res index a444148..bc143fd 100644 --- a/src/cobalt/content/icu/icudt56b/es.res +++ b/src/cobalt/content/icu/icudt56b/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_419.res b/src/cobalt/content/icu/icudt56b/es_419.res index b38d6ab..efa69dc 100644 --- a/src/cobalt/content/icu/icudt56b/es_419.res +++ b/src/cobalt/content/icu/icudt56b/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_AR.res b/src/cobalt/content/icu/icudt56b/es_AR.res index 36da772..b69693b 100644 --- a/src/cobalt/content/icu/icudt56b/es_AR.res +++ b/src/cobalt/content/icu/icudt56b/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_ES.res b/src/cobalt/content/icu/icudt56b/es_ES.res index 0c29168..7a2eb6d 100644 --- a/src/cobalt/content/icu/icudt56b/es_ES.res +++ b/src/cobalt/content/icu/icudt56b/es_ES.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_MX.res b/src/cobalt/content/icu/icudt56b/es_MX.res index 6013a38..15f03cc 100644 --- a/src/cobalt/content/icu/icudt56b/es_MX.res +++ b/src/cobalt/content/icu/icudt56b/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/es_US.res b/src/cobalt/content/icu/icudt56b/es_US.res index a525677..29ef112 100644 --- a/src/cobalt/content/icu/icudt56b/es_US.res +++ b/src/cobalt/content/icu/icudt56b/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/et.res b/src/cobalt/content/icu/icudt56b/et.res index 3fc0978..3c26d48 100644 --- a/src/cobalt/content/icu/icudt56b/et.res +++ b/src/cobalt/content/icu/icudt56b/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/eu.res b/src/cobalt/content/icu/icudt56b/eu.res index 21cb93e..657c9e7 100644 --- a/src/cobalt/content/icu/icudt56b/eu.res +++ b/src/cobalt/content/icu/icudt56b/eu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fa.res b/src/cobalt/content/icu/icudt56b/fa.res index 0080495..42b2153 100644 --- a/src/cobalt/content/icu/icudt56b/fa.res +++ b/src/cobalt/content/icu/icudt56b/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fi.res b/src/cobalt/content/icu/icudt56b/fi.res index 2448243..bb939bd 100644 --- a/src/cobalt/content/icu/icudt56b/fi.res +++ b/src/cobalt/content/icu/icudt56b/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fil.res b/src/cobalt/content/icu/icudt56b/fil.res index 74e424d..e20dbae 100644 --- a/src/cobalt/content/icu/icudt56b/fil.res +++ b/src/cobalt/content/icu/icudt56b/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fo.res b/src/cobalt/content/icu/icudt56b/fo.res index bef3ad7..577b4be 100644 --- a/src/cobalt/content/icu/icudt56b/fo.res +++ b/src/cobalt/content/icu/icudt56b/fo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fr.res b/src/cobalt/content/icu/icudt56b/fr.res index dd3447d..098feaf 100644 --- a/src/cobalt/content/icu/icudt56b/fr.res +++ b/src/cobalt/content/icu/icudt56b/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fr_CA.res b/src/cobalt/content/icu/icudt56b/fr_CA.res index 5521151..8108be1 100644 --- a/src/cobalt/content/icu/icudt56b/fr_CA.res +++ b/src/cobalt/content/icu/icudt56b/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/fr_CH.res b/src/cobalt/content/icu/icudt56b/fr_CH.res index 752e262..79b462a 100644 --- a/src/cobalt/content/icu/icudt56b/fr_CH.res +++ b/src/cobalt/content/icu/icudt56b/fr_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ga.res b/src/cobalt/content/icu/icudt56b/ga.res index 88d5ab5..3398f22 100644 --- a/src/cobalt/content/icu/icudt56b/ga.res +++ b/src/cobalt/content/icu/icudt56b/ga.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/gl.res b/src/cobalt/content/icu/icudt56b/gl.res index 72c9a1c..d3d96da 100644 --- a/src/cobalt/content/icu/icudt56b/gl.res +++ b/src/cobalt/content/icu/icudt56b/gl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/gu.res b/src/cobalt/content/icu/icudt56b/gu.res index 85d3ce9..628c409 100644 --- a/src/cobalt/content/icu/icudt56b/gu.res +++ b/src/cobalt/content/icu/icudt56b/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ha.res b/src/cobalt/content/icu/icudt56b/ha.res index 43e404f..1093733 100644 --- a/src/cobalt/content/icu/icudt56b/ha.res +++ b/src/cobalt/content/icu/icudt56b/ha.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/haw.res b/src/cobalt/content/icu/icudt56b/haw.res index 60ead40..1e1c2bb 100644 --- a/src/cobalt/content/icu/icudt56b/haw.res +++ b/src/cobalt/content/icu/icudt56b/haw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/he.res b/src/cobalt/content/icu/icudt56b/he.res index ebbeb7c..aa5b464 100644 --- a/src/cobalt/content/icu/icudt56b/he.res +++ b/src/cobalt/content/icu/icudt56b/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hi.res b/src/cobalt/content/icu/icudt56b/hi.res index dc70299..0e341e9 100644 --- a/src/cobalt/content/icu/icudt56b/hi.res +++ b/src/cobalt/content/icu/icudt56b/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hr.res b/src/cobalt/content/icu/icudt56b/hr.res index 6bceb0c..1fce684 100644 --- a/src/cobalt/content/icu/icudt56b/hr.res +++ b/src/cobalt/content/icu/icudt56b/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hu.res b/src/cobalt/content/icu/icudt56b/hu.res index d482a63..d8bf7d3 100644 --- a/src/cobalt/content/icu/icudt56b/hu.res +++ b/src/cobalt/content/icu/icudt56b/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/hy.res b/src/cobalt/content/icu/icudt56b/hy.res index e9ebdb6..ab5be83 100644 --- a/src/cobalt/content/icu/icudt56b/hy.res +++ b/src/cobalt/content/icu/icudt56b/hy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/id.res b/src/cobalt/content/icu/icudt56b/id.res index bd5605a..8b9fb6f 100644 --- a/src/cobalt/content/icu/icudt56b/id.res +++ b/src/cobalt/content/icu/icudt56b/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ig.res b/src/cobalt/content/icu/icudt56b/ig.res index 85f26f5..1abde9f 100644 --- a/src/cobalt/content/icu/icudt56b/ig.res +++ b/src/cobalt/content/icu/icudt56b/ig.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/in.res b/src/cobalt/content/icu/icudt56b/in.res index 66a82ba..9296700 100644 --- a/src/cobalt/content/icu/icudt56b/in.res +++ b/src/cobalt/content/icu/icudt56b/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/is.res b/src/cobalt/content/icu/icudt56b/is.res index 8043dda..b9d912a 100644 --- a/src/cobalt/content/icu/icudt56b/is.res +++ b/src/cobalt/content/icu/icudt56b/is.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/it.res b/src/cobalt/content/icu/icudt56b/it.res index aee6ca0..018008b 100644 --- a/src/cobalt/content/icu/icudt56b/it.res +++ b/src/cobalt/content/icu/icudt56b/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/it_CH.res b/src/cobalt/content/icu/icudt56b/it_CH.res index d046860..2548487 100644 --- a/src/cobalt/content/icu/icudt56b/it_CH.res +++ b/src/cobalt/content/icu/icudt56b/it_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/iw.res b/src/cobalt/content/icu/icudt56b/iw.res index 733b115..0ba8df0 100644 --- a/src/cobalt/content/icu/icudt56b/iw.res +++ b/src/cobalt/content/icu/icudt56b/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ja.res b/src/cobalt/content/icu/icudt56b/ja.res index 17e8ac1..dfb8869 100644 --- a/src/cobalt/content/icu/icudt56b/ja.res +++ b/src/cobalt/content/icu/icudt56b/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ka.res b/src/cobalt/content/icu/icudt56b/ka.res index fc8fda6..32dbaea 100644 --- a/src/cobalt/content/icu/icudt56b/ka.res +++ b/src/cobalt/content/icu/icudt56b/ka.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/kk.res b/src/cobalt/content/icu/icudt56b/kk.res index 3e1d3ca..a57f103 100644 --- a/src/cobalt/content/icu/icudt56b/kk.res +++ b/src/cobalt/content/icu/icudt56b/kk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/km.res b/src/cobalt/content/icu/icudt56b/km.res index 6ca2adb..30c2c9d 100644 --- a/src/cobalt/content/icu/icudt56b/km.res +++ b/src/cobalt/content/icu/icudt56b/km.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/kn.res b/src/cobalt/content/icu/icudt56b/kn.res index 757acd5..d383b3e 100644 --- a/src/cobalt/content/icu/icudt56b/kn.res +++ b/src/cobalt/content/icu/icudt56b/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ko.res b/src/cobalt/content/icu/icudt56b/ko.res index 576014a..5e00efb 100644 --- a/src/cobalt/content/icu/icudt56b/ko.res +++ b/src/cobalt/content/icu/icudt56b/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ku.res b/src/cobalt/content/icu/icudt56b/ku.res index 532151e..435f098 100644 --- a/src/cobalt/content/icu/icudt56b/ku.res +++ b/src/cobalt/content/icu/icudt56b/ku.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ky.res b/src/cobalt/content/icu/icudt56b/ky.res index 4b7da68..5e6b81a 100644 --- a/src/cobalt/content/icu/icudt56b/ky.res +++ b/src/cobalt/content/icu/icudt56b/ky.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/af.res b/src/cobalt/content/icu/icudt56b/lang/af.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/af.res +++ b/src/cobalt/content/icu/icudt56b/lang/af.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ak.res b/src/cobalt/content/icu/icudt56b/lang/ak.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ak.res +++ b/src/cobalt/content/icu/icudt56b/lang/ak.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/am.res b/src/cobalt/content/icu/icudt56b/lang/am.res index 5191444..bed926c 100644 --- a/src/cobalt/content/icu/icudt56b/lang/am.res +++ b/src/cobalt/content/icu/icudt56b/lang/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/an.res b/src/cobalt/content/icu/icudt56b/lang/an.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/an.res +++ b/src/cobalt/content/icu/icudt56b/lang/an.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ar.res b/src/cobalt/content/icu/icudt56b/lang/ar.res index eea00ff..988eb5d 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ar.res +++ b/src/cobalt/content/icu/icudt56b/lang/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ast.res b/src/cobalt/content/icu/icudt56b/lang/ast.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ast.res +++ b/src/cobalt/content/icu/icudt56b/lang/ast.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/az.res b/src/cobalt/content/icu/icudt56b/lang/az.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/az.res +++ b/src/cobalt/content/icu/icudt56b/lang/az.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/be.res b/src/cobalt/content/icu/icudt56b/lang/be.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/be.res +++ b/src/cobalt/content/icu/icudt56b/lang/be.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bem.res b/src/cobalt/content/icu/icudt56b/lang/bem.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/bem.res +++ b/src/cobalt/content/icu/icudt56b/lang/bem.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bg.res b/src/cobalt/content/icu/icudt56b/lang/bg.res index f8ba03f..b5d1160 100644 --- a/src/cobalt/content/icu/icudt56b/lang/bg.res +++ b/src/cobalt/content/icu/icudt56b/lang/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bn.res b/src/cobalt/content/icu/icudt56b/lang/bn.res index fdc9cdb..b4c023e 100644 --- a/src/cobalt/content/icu/icudt56b/lang/bn.res +++ b/src/cobalt/content/icu/icudt56b/lang/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/br.res b/src/cobalt/content/icu/icudt56b/lang/br.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/br.res +++ b/src/cobalt/content/icu/icudt56b/lang/br.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/bs.res b/src/cobalt/content/icu/icudt56b/lang/bs.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/bs.res +++ b/src/cobalt/content/icu/icudt56b/lang/bs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ca.res b/src/cobalt/content/icu/icudt56b/lang/ca.res index c05c095..6012fbf 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ca.res +++ b/src/cobalt/content/icu/icudt56b/lang/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ckb.res b/src/cobalt/content/icu/icudt56b/lang/ckb.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ckb.res +++ b/src/cobalt/content/icu/icudt56b/lang/ckb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/cs.res b/src/cobalt/content/icu/icudt56b/lang/cs.res index 5fdcad3..1da035b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/cs.res +++ b/src/cobalt/content/icu/icudt56b/lang/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/cy.res b/src/cobalt/content/icu/icudt56b/lang/cy.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/cy.res +++ b/src/cobalt/content/icu/icudt56b/lang/cy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/da.res b/src/cobalt/content/icu/icudt56b/lang/da.res index d3125da..81df9f3 100644 --- a/src/cobalt/content/icu/icudt56b/lang/da.res +++ b/src/cobalt/content/icu/icudt56b/lang/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/de.res b/src/cobalt/content/icu/icudt56b/lang/de.res index 97792db..34c8d12 100644 --- a/src/cobalt/content/icu/icudt56b/lang/de.res +++ b/src/cobalt/content/icu/icudt56b/lang/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ee.res b/src/cobalt/content/icu/icudt56b/lang/ee.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ee.res +++ b/src/cobalt/content/icu/icudt56b/lang/ee.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/el.res b/src/cobalt/content/icu/icudt56b/lang/el.res index b851f9a..a5a08c5 100644 --- a/src/cobalt/content/icu/icudt56b/lang/el.res +++ b/src/cobalt/content/icu/icudt56b/lang/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/en.res b/src/cobalt/content/icu/icudt56b/lang/en.res index 747e6f3..d429522 100644 --- a/src/cobalt/content/icu/icudt56b/lang/en.res +++ b/src/cobalt/content/icu/icudt56b/lang/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/en_GB.res b/src/cobalt/content/icu/icudt56b/lang/en_GB.res index cb1670b..0a55f56 100644 --- a/src/cobalt/content/icu/icudt56b/lang/en_GB.res +++ b/src/cobalt/content/icu/icudt56b/lang/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/eo.res b/src/cobalt/content/icu/icudt56b/lang/eo.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/eo.res +++ b/src/cobalt/content/icu/icudt56b/lang/eo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/es.res b/src/cobalt/content/icu/icudt56b/lang/es.res index 7eedb98..ee3ae99 100644 --- a/src/cobalt/content/icu/icudt56b/lang/es.res +++ b/src/cobalt/content/icu/icudt56b/lang/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/es_419.res b/src/cobalt/content/icu/icudt56b/lang/es_419.res index 107cc66..6447346 100644 --- a/src/cobalt/content/icu/icudt56b/lang/es_419.res +++ b/src/cobalt/content/icu/icudt56b/lang/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/et.res b/src/cobalt/content/icu/icudt56b/lang/et.res index 0b0146b..d588e70 100644 --- a/src/cobalt/content/icu/icudt56b/lang/et.res +++ b/src/cobalt/content/icu/icudt56b/lang/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/eu.res b/src/cobalt/content/icu/icudt56b/lang/eu.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/eu.res +++ b/src/cobalt/content/icu/icudt56b/lang/eu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fa.res b/src/cobalt/content/icu/icudt56b/lang/fa.res index 59d9442..3fd2782 100644 --- a/src/cobalt/content/icu/icudt56b/lang/fa.res +++ b/src/cobalt/content/icu/icudt56b/lang/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fi.res b/src/cobalt/content/icu/icudt56b/lang/fi.res index 1ada0a1..4f10019 100644 --- a/src/cobalt/content/icu/icudt56b/lang/fi.res +++ b/src/cobalt/content/icu/icudt56b/lang/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fil.res b/src/cobalt/content/icu/icudt56b/lang/fil.res index 62740af..1f994f7 100644 --- a/src/cobalt/content/icu/icudt56b/lang/fil.res +++ b/src/cobalt/content/icu/icudt56b/lang/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fo.res b/src/cobalt/content/icu/icudt56b/lang/fo.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/fo.res +++ b/src/cobalt/content/icu/icudt56b/lang/fo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/fr.res b/src/cobalt/content/icu/icudt56b/lang/fr.res index 57fcb6e..3a15959 100644 --- a/src/cobalt/content/icu/icudt56b/lang/fr.res +++ b/src/cobalt/content/icu/icudt56b/lang/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ga.res b/src/cobalt/content/icu/icudt56b/lang/ga.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ga.res +++ b/src/cobalt/content/icu/icudt56b/lang/ga.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/gl.res b/src/cobalt/content/icu/icudt56b/lang/gl.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/gl.res +++ b/src/cobalt/content/icu/icudt56b/lang/gl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/gu.res b/src/cobalt/content/icu/icudt56b/lang/gu.res index b8f8fce..1fd7b89 100644 --- a/src/cobalt/content/icu/icudt56b/lang/gu.res +++ b/src/cobalt/content/icu/icudt56b/lang/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ha.res b/src/cobalt/content/icu/icudt56b/lang/ha.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ha.res +++ b/src/cobalt/content/icu/icudt56b/lang/ha.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/haw.res b/src/cobalt/content/icu/icudt56b/lang/haw.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/haw.res +++ b/src/cobalt/content/icu/icudt56b/lang/haw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/he.res b/src/cobalt/content/icu/icudt56b/lang/he.res index a61e424..2fd4b4d 100644 --- a/src/cobalt/content/icu/icudt56b/lang/he.res +++ b/src/cobalt/content/icu/icudt56b/lang/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hi.res b/src/cobalt/content/icu/icudt56b/lang/hi.res index 57c4718..0fb4fc6 100644 --- a/src/cobalt/content/icu/icudt56b/lang/hi.res +++ b/src/cobalt/content/icu/icudt56b/lang/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hr.res b/src/cobalt/content/icu/icudt56b/lang/hr.res index 3eb40c6..dd724b5 100644 --- a/src/cobalt/content/icu/icudt56b/lang/hr.res +++ b/src/cobalt/content/icu/icudt56b/lang/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hu.res b/src/cobalt/content/icu/icudt56b/lang/hu.res index 4185bcd..dbe5b44 100644 --- a/src/cobalt/content/icu/icudt56b/lang/hu.res +++ b/src/cobalt/content/icu/icudt56b/lang/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/hy.res b/src/cobalt/content/icu/icudt56b/lang/hy.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/hy.res +++ b/src/cobalt/content/icu/icudt56b/lang/hy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/id.res b/src/cobalt/content/icu/icudt56b/lang/id.res index cb760e1..9747eec 100644 --- a/src/cobalt/content/icu/icudt56b/lang/id.res +++ b/src/cobalt/content/icu/icudt56b/lang/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ig.res b/src/cobalt/content/icu/icudt56b/lang/ig.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ig.res +++ b/src/cobalt/content/icu/icudt56b/lang/ig.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/in.res b/src/cobalt/content/icu/icudt56b/lang/in.res index b2c35ef..da98b73 100644 --- a/src/cobalt/content/icu/icudt56b/lang/in.res +++ b/src/cobalt/content/icu/icudt56b/lang/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/is.res b/src/cobalt/content/icu/icudt56b/lang/is.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/is.res +++ b/src/cobalt/content/icu/icudt56b/lang/is.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/it.res b/src/cobalt/content/icu/icudt56b/lang/it.res index d4b0ffc..370955f 100644 --- a/src/cobalt/content/icu/icudt56b/lang/it.res +++ b/src/cobalt/content/icu/icudt56b/lang/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/iw.res b/src/cobalt/content/icu/icudt56b/lang/iw.res index 247bf06..d111f93 100644 --- a/src/cobalt/content/icu/icudt56b/lang/iw.res +++ b/src/cobalt/content/icu/icudt56b/lang/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ja.res b/src/cobalt/content/icu/icudt56b/lang/ja.res index 674dbb7..2190b76 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ja.res +++ b/src/cobalt/content/icu/icudt56b/lang/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ka.res b/src/cobalt/content/icu/icudt56b/lang/ka.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ka.res +++ b/src/cobalt/content/icu/icudt56b/lang/ka.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/kk.res b/src/cobalt/content/icu/icudt56b/lang/kk.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/kk.res +++ b/src/cobalt/content/icu/icudt56b/lang/kk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/km.res b/src/cobalt/content/icu/icudt56b/lang/km.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/km.res +++ b/src/cobalt/content/icu/icudt56b/lang/km.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/kn.res b/src/cobalt/content/icu/icudt56b/lang/kn.res index 381a80b..0608b45 100644 --- a/src/cobalt/content/icu/icudt56b/lang/kn.res +++ b/src/cobalt/content/icu/icudt56b/lang/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ko.res b/src/cobalt/content/icu/icudt56b/lang/ko.res index f89b341..9bb7b3c 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ko.res +++ b/src/cobalt/content/icu/icudt56b/lang/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ku.res b/src/cobalt/content/icu/icudt56b/lang/ku.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ku.res +++ b/src/cobalt/content/icu/icudt56b/lang/ku.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ky.res b/src/cobalt/content/icu/icudt56b/lang/ky.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ky.res +++ b/src/cobalt/content/icu/icudt56b/lang/ky.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lg.res b/src/cobalt/content/icu/icudt56b/lang/lg.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/lg.res +++ b/src/cobalt/content/icu/icudt56b/lang/lg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ln.res b/src/cobalt/content/icu/icudt56b/lang/ln.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ln.res +++ b/src/cobalt/content/icu/icudt56b/lang/ln.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lo.res b/src/cobalt/content/icu/icudt56b/lang/lo.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/lo.res +++ b/src/cobalt/content/icu/icudt56b/lang/lo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lt.res b/src/cobalt/content/icu/icudt56b/lang/lt.res index 471b004..bca1349 100644 --- a/src/cobalt/content/icu/icudt56b/lang/lt.res +++ b/src/cobalt/content/icu/icudt56b/lang/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/lv.res b/src/cobalt/content/icu/icudt56b/lang/lv.res index 993c698..d0700b9 100644 --- a/src/cobalt/content/icu/icudt56b/lang/lv.res +++ b/src/cobalt/content/icu/icudt56b/lang/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mfe.res b/src/cobalt/content/icu/icudt56b/lang/mfe.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/mfe.res +++ b/src/cobalt/content/icu/icudt56b/lang/mfe.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mg.res b/src/cobalt/content/icu/icudt56b/lang/mg.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/mg.res +++ b/src/cobalt/content/icu/icudt56b/lang/mg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mk.res b/src/cobalt/content/icu/icudt56b/lang/mk.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/mk.res +++ b/src/cobalt/content/icu/icudt56b/lang/mk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ml.res b/src/cobalt/content/icu/icudt56b/lang/ml.res index c40ffa5..0c1c6b5 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ml.res +++ b/src/cobalt/content/icu/icudt56b/lang/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mn.res b/src/cobalt/content/icu/icudt56b/lang/mn.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/mn.res +++ b/src/cobalt/content/icu/icudt56b/lang/mn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mo.res b/src/cobalt/content/icu/icudt56b/lang/mo.res index ee0ea49..ed7653e 100644 --- a/src/cobalt/content/icu/icudt56b/lang/mo.res +++ b/src/cobalt/content/icu/icudt56b/lang/mo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mr.res b/src/cobalt/content/icu/icudt56b/lang/mr.res index 2c1943c..27d225f 100644 --- a/src/cobalt/content/icu/icudt56b/lang/mr.res +++ b/src/cobalt/content/icu/icudt56b/lang/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ms.res b/src/cobalt/content/icu/icudt56b/lang/ms.res index c40316d..21cc141 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ms.res +++ b/src/cobalt/content/icu/icudt56b/lang/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/mt.res b/src/cobalt/content/icu/icudt56b/lang/mt.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/mt.res +++ b/src/cobalt/content/icu/icudt56b/lang/mt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/my.res b/src/cobalt/content/icu/icudt56b/lang/my.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/my.res +++ b/src/cobalt/content/icu/icudt56b/lang/my.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nb.res b/src/cobalt/content/icu/icudt56b/lang/nb.res index 5112e25..2878212 100644 --- a/src/cobalt/content/icu/icudt56b/lang/nb.res +++ b/src/cobalt/content/icu/icudt56b/lang/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ne.res b/src/cobalt/content/icu/icudt56b/lang/ne.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ne.res +++ b/src/cobalt/content/icu/icudt56b/lang/ne.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nl.res b/src/cobalt/content/icu/icudt56b/lang/nl.res index 751ba02..1459803 100644 --- a/src/cobalt/content/icu/icudt56b/lang/nl.res +++ b/src/cobalt/content/icu/icudt56b/lang/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nn.res b/src/cobalt/content/icu/icudt56b/lang/nn.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/nn.res +++ b/src/cobalt/content/icu/icudt56b/lang/nn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/no.res b/src/cobalt/content/icu/icudt56b/lang/no.res index a0258b7..7975dbd 100644 --- a/src/cobalt/content/icu/icudt56b/lang/no.res +++ b/src/cobalt/content/icu/icudt56b/lang/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/nyn.res b/src/cobalt/content/icu/icudt56b/lang/nyn.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/nyn.res +++ b/src/cobalt/content/icu/icudt56b/lang/nyn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/om.res b/src/cobalt/content/icu/icudt56b/lang/om.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/om.res +++ b/src/cobalt/content/icu/icudt56b/lang/om.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/or.res b/src/cobalt/content/icu/icudt56b/lang/or.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/or.res +++ b/src/cobalt/content/icu/icudt56b/lang/or.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pa.res b/src/cobalt/content/icu/icudt56b/lang/pa.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/pa.res +++ b/src/cobalt/content/icu/icudt56b/lang/pa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pl.res b/src/cobalt/content/icu/icudt56b/lang/pl.res index d67c390..2652e03 100644 --- a/src/cobalt/content/icu/icudt56b/lang/pl.res +++ b/src/cobalt/content/icu/icudt56b/lang/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pool.res b/src/cobalt/content/icu/icudt56b/lang/pool.res index 76166a1..7fd7f96 100644 --- a/src/cobalt/content/icu/icudt56b/lang/pool.res +++ b/src/cobalt/content/icu/icudt56b/lang/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ps.res b/src/cobalt/content/icu/icudt56b/lang/ps.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ps.res +++ b/src/cobalt/content/icu/icudt56b/lang/ps.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pt.res b/src/cobalt/content/icu/icudt56b/lang/pt.res index 0ae2863..cbc0145 100644 --- a/src/cobalt/content/icu/icudt56b/lang/pt.res +++ b/src/cobalt/content/icu/icudt56b/lang/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/pt_PT.res b/src/cobalt/content/icu/icudt56b/lang/pt_PT.res index 90433ce..453e716 100644 --- a/src/cobalt/content/icu/icudt56b/lang/pt_PT.res +++ b/src/cobalt/content/icu/icudt56b/lang/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/rm.res b/src/cobalt/content/icu/icudt56b/lang/rm.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/rm.res +++ b/src/cobalt/content/icu/icudt56b/lang/rm.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/rn.res b/src/cobalt/content/icu/icudt56b/lang/rn.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/rn.res +++ b/src/cobalt/content/icu/icudt56b/lang/rn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ro.res b/src/cobalt/content/icu/icudt56b/lang/ro.res index e9aa6fa..05034d8 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ro.res +++ b/src/cobalt/content/icu/icudt56b/lang/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ro_MD.res b/src/cobalt/content/icu/icudt56b/lang/ro_MD.res index 78ed83b..6b0be86 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ro_MD.res +++ b/src/cobalt/content/icu/icudt56b/lang/ro_MD.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/root.res b/src/cobalt/content/icu/icudt56b/lang/root.res index dc0042b..b13f41b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/root.res +++ b/src/cobalt/content/icu/icudt56b/lang/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ru.res b/src/cobalt/content/icu/icudt56b/lang/ru.res index 1ecc96f..9d3e7dc 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ru.res +++ b/src/cobalt/content/icu/icudt56b/lang/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/rw.res b/src/cobalt/content/icu/icudt56b/lang/rw.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/rw.res +++ b/src/cobalt/content/icu/icudt56b/lang/rw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sh.res b/src/cobalt/content/icu/icudt56b/lang/sh.res index bd2f9e8..64eb35f 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sh.res +++ b/src/cobalt/content/icu/icudt56b/lang/sh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/si.res b/src/cobalt/content/icu/icudt56b/lang/si.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/si.res +++ b/src/cobalt/content/icu/icudt56b/lang/si.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sk.res b/src/cobalt/content/icu/icudt56b/lang/sk.res index 15be576..6e91d73 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sk.res +++ b/src/cobalt/content/icu/icudt56b/lang/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sl.res b/src/cobalt/content/icu/icudt56b/lang/sl.res index 8c364c2..8e79881 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sl.res +++ b/src/cobalt/content/icu/icudt56b/lang/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sn.res b/src/cobalt/content/icu/icudt56b/lang/sn.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sn.res +++ b/src/cobalt/content/icu/icudt56b/lang/sn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/so.res b/src/cobalt/content/icu/icudt56b/lang/so.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/so.res +++ b/src/cobalt/content/icu/icudt56b/lang/so.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sq.res b/src/cobalt/content/icu/icudt56b/lang/sq.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sq.res +++ b/src/cobalt/content/icu/icudt56b/lang/sq.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sr.res b/src/cobalt/content/icu/icudt56b/lang/sr.res index 6d3aa9d..dc9b003 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sr.res +++ b/src/cobalt/content/icu/icudt56b/lang/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res b/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res index 0dced64..01ac57f 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56b/lang/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sv.res b/src/cobalt/content/icu/icudt56b/lang/sv.res index ee2aa38..d7bb8bf 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sv.res +++ b/src/cobalt/content/icu/icudt56b/lang/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/sw.res b/src/cobalt/content/icu/icudt56b/lang/sw.res index e64c5da..d33af54 100644 --- a/src/cobalt/content/icu/icudt56b/lang/sw.res +++ b/src/cobalt/content/icu/icudt56b/lang/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ta.res b/src/cobalt/content/icu/icudt56b/lang/ta.res index dd6d2fa..c58fff5 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ta.res +++ b/src/cobalt/content/icu/icudt56b/lang/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/te.res b/src/cobalt/content/icu/icudt56b/lang/te.res index 4dbcb83..a0334d2 100644 --- a/src/cobalt/content/icu/icudt56b/lang/te.res +++ b/src/cobalt/content/icu/icudt56b/lang/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/tg.res b/src/cobalt/content/icu/icudt56b/lang/tg.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/tg.res +++ b/src/cobalt/content/icu/icudt56b/lang/tg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/th.res b/src/cobalt/content/icu/icudt56b/lang/th.res index 8de2e9b..369e86e 100644 --- a/src/cobalt/content/icu/icudt56b/lang/th.res +++ b/src/cobalt/content/icu/icudt56b/lang/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ti.res b/src/cobalt/content/icu/icudt56b/lang/ti.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ti.res +++ b/src/cobalt/content/icu/icudt56b/lang/ti.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/tl.res b/src/cobalt/content/icu/icudt56b/lang/tl.res index 13882f7..cb41750 100644 --- a/src/cobalt/content/icu/icudt56b/lang/tl.res +++ b/src/cobalt/content/icu/icudt56b/lang/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/to.res b/src/cobalt/content/icu/icudt56b/lang/to.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/to.res +++ b/src/cobalt/content/icu/icudt56b/lang/to.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/tr.res b/src/cobalt/content/icu/icudt56b/lang/tr.res index f11ddd9..a7d7c37 100644 --- a/src/cobalt/content/icu/icudt56b/lang/tr.res +++ b/src/cobalt/content/icu/icudt56b/lang/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/uk.res b/src/cobalt/content/icu/icudt56b/lang/uk.res index 5d353fd..baa2048 100644 --- a/src/cobalt/content/icu/icudt56b/lang/uk.res +++ b/src/cobalt/content/icu/icudt56b/lang/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/ur.res b/src/cobalt/content/icu/icudt56b/lang/ur.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/ur.res +++ b/src/cobalt/content/icu/icudt56b/lang/ur.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/uz.res b/src/cobalt/content/icu/icudt56b/lang/uz.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/uz.res +++ b/src/cobalt/content/icu/icudt56b/lang/uz.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/vi.res b/src/cobalt/content/icu/icudt56b/lang/vi.res index 12b8b24..46117dd 100644 --- a/src/cobalt/content/icu/icudt56b/lang/vi.res +++ b/src/cobalt/content/icu/icudt56b/lang/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/wa.res b/src/cobalt/content/icu/icudt56b/lang/wa.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/wa.res +++ b/src/cobalt/content/icu/icudt56b/lang/wa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/yo.res b/src/cobalt/content/icu/icudt56b/lang/yo.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/yo.res +++ b/src/cobalt/content/icu/icudt56b/lang/yo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh.res b/src/cobalt/content/icu/icudt56b/lang/zh.res index 0efbae2..ed8ec1a 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_CN.res b/src/cobalt/content/icu/icudt56b/lang/zh_CN.res index bcba38b..5e3c9fa 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_CN.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_HK.res b/src/cobalt/content/icu/icudt56b/lang/zh_HK.res index 6808174..1de3637 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_HK.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res index b72028d..02c942c 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res index 78ed83b..6b0be86 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res index 78ed83b..6b0be86 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res index 62daeab..bbdf8d3 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res index cac443a..e3b3eba 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res index 78ed83b..6b0be86 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_SG.res b/src/cobalt/content/icu/icudt56b/lang/zh_SG.res index f08cca6..bcdacc7 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_SG.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zh_TW.res b/src/cobalt/content/icu/icudt56b/lang/zh_TW.res index 60f9f5f..1b66f29 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zh_TW.res +++ b/src/cobalt/content/icu/icudt56b/lang/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lang/zu.res b/src/cobalt/content/icu/icudt56b/lang/zu.res index c6c8d20..6d3ad7b 100644 --- a/src/cobalt/content/icu/icudt56b/lang/zu.res +++ b/src/cobalt/content/icu/icudt56b/lang/zu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lg.res b/src/cobalt/content/icu/icudt56b/lg.res index f920156..badaef3 100644 --- a/src/cobalt/content/icu/icudt56b/lg.res +++ b/src/cobalt/content/icu/icudt56b/lg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ln.res b/src/cobalt/content/icu/icudt56b/ln.res index 1ff9d2e..b94dedf 100644 --- a/src/cobalt/content/icu/icudt56b/ln.res +++ b/src/cobalt/content/icu/icudt56b/ln.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lo.res b/src/cobalt/content/icu/icudt56b/lo.res index 61577ec..5b4f7f8 100644 --- a/src/cobalt/content/icu/icudt56b/lo.res +++ b/src/cobalt/content/icu/icudt56b/lo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lt.res b/src/cobalt/content/icu/icudt56b/lt.res index ddd87c1..ec9ce5a 100644 --- a/src/cobalt/content/icu/icudt56b/lt.res +++ b/src/cobalt/content/icu/icudt56b/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/lv.res b/src/cobalt/content/icu/icudt56b/lv.res index b775599..55a6542 100644 --- a/src/cobalt/content/icu/icudt56b/lv.res +++ b/src/cobalt/content/icu/icudt56b/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mfe.res b/src/cobalt/content/icu/icudt56b/mfe.res index 2d4dbb2..8a199ea 100644 --- a/src/cobalt/content/icu/icudt56b/mfe.res +++ b/src/cobalt/content/icu/icudt56b/mfe.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mg.res b/src/cobalt/content/icu/icudt56b/mg.res index ff7da77..018ea5b 100644 --- a/src/cobalt/content/icu/icudt56b/mg.res +++ b/src/cobalt/content/icu/icudt56b/mg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mk.res b/src/cobalt/content/icu/icudt56b/mk.res index ca66c66..cc3a879 100644 --- a/src/cobalt/content/icu/icudt56b/mk.res +++ b/src/cobalt/content/icu/icudt56b/mk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ml.res b/src/cobalt/content/icu/icudt56b/ml.res index a2ed6e3..23a1971 100644 --- a/src/cobalt/content/icu/icudt56b/ml.res +++ b/src/cobalt/content/icu/icudt56b/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mn.res b/src/cobalt/content/icu/icudt56b/mn.res index 95aaecb..55b8d55 100644 --- a/src/cobalt/content/icu/icudt56b/mn.res +++ b/src/cobalt/content/icu/icudt56b/mn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mo.res b/src/cobalt/content/icu/icudt56b/mo.res index 05eef9b..b252a1b 100644 --- a/src/cobalt/content/icu/icudt56b/mo.res +++ b/src/cobalt/content/icu/icudt56b/mo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mr.res b/src/cobalt/content/icu/icudt56b/mr.res index 0c8f196..3de81ed 100644 --- a/src/cobalt/content/icu/icudt56b/mr.res +++ b/src/cobalt/content/icu/icudt56b/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ms.res b/src/cobalt/content/icu/icudt56b/ms.res index 21d82f1..4be9461 100644 --- a/src/cobalt/content/icu/icudt56b/ms.res +++ b/src/cobalt/content/icu/icudt56b/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/mt.res b/src/cobalt/content/icu/icudt56b/mt.res index 771e308..62d55a5 100644 --- a/src/cobalt/content/icu/icudt56b/mt.res +++ b/src/cobalt/content/icu/icudt56b/mt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/my.res b/src/cobalt/content/icu/icudt56b/my.res index ca6a009..04fdbd2 100644 --- a/src/cobalt/content/icu/icudt56b/my.res +++ b/src/cobalt/content/icu/icudt56b/my.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nb.res b/src/cobalt/content/icu/icudt56b/nb.res index 0c70a62..7eec666 100644 --- a/src/cobalt/content/icu/icudt56b/nb.res +++ b/src/cobalt/content/icu/icudt56b/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ne.res b/src/cobalt/content/icu/icudt56b/ne.res index 0d3bca6..f4c368a 100644 --- a/src/cobalt/content/icu/icudt56b/ne.res +++ b/src/cobalt/content/icu/icudt56b/ne.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nl.res b/src/cobalt/content/icu/icudt56b/nl.res index 15379de..ac4b49f 100644 --- a/src/cobalt/content/icu/icudt56b/nl.res +++ b/src/cobalt/content/icu/icudt56b/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nn.res b/src/cobalt/content/icu/icudt56b/nn.res index 93298fe..c26183a 100644 --- a/src/cobalt/content/icu/icudt56b/nn.res +++ b/src/cobalt/content/icu/icudt56b/nn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/no.res b/src/cobalt/content/icu/icudt56b/no.res index 2daac08..b78bedc 100644 --- a/src/cobalt/content/icu/icudt56b/no.res +++ b/src/cobalt/content/icu/icudt56b/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/nyn.res b/src/cobalt/content/icu/icudt56b/nyn.res index 57679e5..9d2db5b 100644 --- a/src/cobalt/content/icu/icudt56b/nyn.res +++ b/src/cobalt/content/icu/icudt56b/nyn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/om.res b/src/cobalt/content/icu/icudt56b/om.res index 57679e5..9d2db5b 100644 --- a/src/cobalt/content/icu/icudt56b/om.res +++ b/src/cobalt/content/icu/icudt56b/om.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/or.res b/src/cobalt/content/icu/icudt56b/or.res index 8d998f5..2b190ce 100644 --- a/src/cobalt/content/icu/icudt56b/or.res +++ b/src/cobalt/content/icu/icudt56b/or.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pa.res b/src/cobalt/content/icu/icudt56b/pa.res index 274aa23..cb80517 100644 --- a/src/cobalt/content/icu/icudt56b/pa.res +++ b/src/cobalt/content/icu/icudt56b/pa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pl.res b/src/cobalt/content/icu/icudt56b/pl.res index 92e128d..f5a0776 100644 --- a/src/cobalt/content/icu/icudt56b/pl.res +++ b/src/cobalt/content/icu/icudt56b/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pool.res b/src/cobalt/content/icu/icudt56b/pool.res index cc6b653..91f6ad9 100644 --- a/src/cobalt/content/icu/icudt56b/pool.res +++ b/src/cobalt/content/icu/icudt56b/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ps.res b/src/cobalt/content/icu/icudt56b/ps.res index bb14e4e..1281bb4 100644 --- a/src/cobalt/content/icu/icudt56b/ps.res +++ b/src/cobalt/content/icu/icudt56b/ps.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pt.res b/src/cobalt/content/icu/icudt56b/pt.res index a8cd770..cb7b5c1 100644 --- a/src/cobalt/content/icu/icudt56b/pt.res +++ b/src/cobalt/content/icu/icudt56b/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pt_BR.res b/src/cobalt/content/icu/icudt56b/pt_BR.res index 0c29168..7a2eb6d 100644 --- a/src/cobalt/content/icu/icudt56b/pt_BR.res +++ b/src/cobalt/content/icu/icudt56b/pt_BR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/pt_PT.res b/src/cobalt/content/icu/icudt56b/pt_PT.res index 3eab096..dfc2456 100644 --- a/src/cobalt/content/icu/icudt56b/pt_PT.res +++ b/src/cobalt/content/icu/icudt56b/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/region/en.res b/src/cobalt/content/icu/icudt56b/region/en.res index 45c6423..c5c145b 100644 --- a/src/cobalt/content/icu/icudt56b/region/en.res +++ b/src/cobalt/content/icu/icudt56b/region/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/region/pool.res b/src/cobalt/content/icu/icudt56b/region/pool.res index 194ef79..d6bfffb 100644 --- a/src/cobalt/content/icu/icudt56b/region/pool.res +++ b/src/cobalt/content/icu/icudt56b/region/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/region/root.res b/src/cobalt/content/icu/icudt56b/region/root.res index d61b851..0121ec9 100644 --- a/src/cobalt/content/icu/icudt56b/region/root.res +++ b/src/cobalt/content/icu/icudt56b/region/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/rm.res b/src/cobalt/content/icu/icudt56b/rm.res index 2ac0eb9..cfdff81 100644 --- a/src/cobalt/content/icu/icudt56b/rm.res +++ b/src/cobalt/content/icu/icudt56b/rm.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/rn.res b/src/cobalt/content/icu/icudt56b/rn.res index 57679e5..9d2db5b 100644 --- a/src/cobalt/content/icu/icudt56b/rn.res +++ b/src/cobalt/content/icu/icudt56b/rn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ro.res b/src/cobalt/content/icu/icudt56b/ro.res index 4658315..87ddc8d 100644 --- a/src/cobalt/content/icu/icudt56b/ro.res +++ b/src/cobalt/content/icu/icudt56b/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ro_MD.res b/src/cobalt/content/icu/icudt56b/ro_MD.res index 7c08d1e..67a02a2 100644 --- a/src/cobalt/content/icu/icudt56b/ro_MD.res +++ b/src/cobalt/content/icu/icudt56b/ro_MD.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/root.res b/src/cobalt/content/icu/icudt56b/root.res index 27050be..4fce667 100644 --- a/src/cobalt/content/icu/icudt56b/root.res +++ b/src/cobalt/content/icu/icudt56b/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ru.res b/src/cobalt/content/icu/icudt56b/ru.res index 1d470e3..e6c012c 100644 --- a/src/cobalt/content/icu/icudt56b/ru.res +++ b/src/cobalt/content/icu/icudt56b/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/rw.res b/src/cobalt/content/icu/icudt56b/rw.res index 57679e5..9d2db5b 100644 --- a/src/cobalt/content/icu/icudt56b/rw.res +++ b/src/cobalt/content/icu/icudt56b/rw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sh.res b/src/cobalt/content/icu/icudt56b/sh.res index 2a2fa54..6458c97 100644 --- a/src/cobalt/content/icu/icudt56b/sh.res +++ b/src/cobalt/content/icu/icudt56b/sh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/si.res b/src/cobalt/content/icu/icudt56b/si.res index 6be2069..1f0112e 100644 --- a/src/cobalt/content/icu/icudt56b/si.res +++ b/src/cobalt/content/icu/icudt56b/si.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sk.res b/src/cobalt/content/icu/icudt56b/sk.res index 4e9233c..e48c0fc 100644 --- a/src/cobalt/content/icu/icudt56b/sk.res +++ b/src/cobalt/content/icu/icudt56b/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sl.res b/src/cobalt/content/icu/icudt56b/sl.res index 4d4af72..c2a1d58 100644 --- a/src/cobalt/content/icu/icudt56b/sl.res +++ b/src/cobalt/content/icu/icudt56b/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sn.res b/src/cobalt/content/icu/icudt56b/sn.res index cd8e90d..d2a0d61 100644 --- a/src/cobalt/content/icu/icudt56b/sn.res +++ b/src/cobalt/content/icu/icudt56b/sn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/so.res b/src/cobalt/content/icu/icudt56b/so.res index 57679e5..9d2db5b 100644 --- a/src/cobalt/content/icu/icudt56b/so.res +++ b/src/cobalt/content/icu/icudt56b/so.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sq.res b/src/cobalt/content/icu/icudt56b/sq.res index 6785b37..c91d21f 100644 --- a/src/cobalt/content/icu/icudt56b/sq.res +++ b/src/cobalt/content/icu/icudt56b/sq.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sr.res b/src/cobalt/content/icu/icudt56b/sr.res index 0fffd77..f1f0d0e 100644 --- a/src/cobalt/content/icu/icudt56b/sr.res +++ b/src/cobalt/content/icu/icudt56b/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sr_Latn.res b/src/cobalt/content/icu/icudt56b/sr_Latn.res index d12c6fc..09e6464 100644 --- a/src/cobalt/content/icu/icudt56b/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56b/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sv.res b/src/cobalt/content/icu/icudt56b/sv.res index bb2f295..9ebcee8 100644 --- a/src/cobalt/content/icu/icudt56b/sv.res +++ b/src/cobalt/content/icu/icudt56b/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/sw.res b/src/cobalt/content/icu/icudt56b/sw.res index 06acb42..4f419de 100644 --- a/src/cobalt/content/icu/icudt56b/sw.res +++ b/src/cobalt/content/icu/icudt56b/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ta.res b/src/cobalt/content/icu/icudt56b/ta.res index 79165d4..f8c41f3 100644 --- a/src/cobalt/content/icu/icudt56b/ta.res +++ b/src/cobalt/content/icu/icudt56b/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/te.res b/src/cobalt/content/icu/icudt56b/te.res index c636277..e9b4bd5 100644 --- a/src/cobalt/content/icu/icudt56b/te.res +++ b/src/cobalt/content/icu/icudt56b/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/tg.res b/src/cobalt/content/icu/icudt56b/tg.res index fb5ac7e..6587279 100644 --- a/src/cobalt/content/icu/icudt56b/tg.res +++ b/src/cobalt/content/icu/icudt56b/tg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/th.res b/src/cobalt/content/icu/icudt56b/th.res index 0585745..21c5770 100644 --- a/src/cobalt/content/icu/icudt56b/th.res +++ b/src/cobalt/content/icu/icudt56b/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ti.res b/src/cobalt/content/icu/icudt56b/ti.res index 88d1885..b1be538 100644 --- a/src/cobalt/content/icu/icudt56b/ti.res +++ b/src/cobalt/content/icu/icudt56b/ti.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/tl.res b/src/cobalt/content/icu/icudt56b/tl.res index 181b960..2a31e1a 100644 --- a/src/cobalt/content/icu/icudt56b/tl.res +++ b/src/cobalt/content/icu/icudt56b/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/to.res b/src/cobalt/content/icu/icudt56b/to.res index 1d1a083..59f438b 100644 --- a/src/cobalt/content/icu/icudt56b/to.res +++ b/src/cobalt/content/icu/icudt56b/to.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/tr.res b/src/cobalt/content/icu/icudt56b/tr.res index 278e42d..4a6298f 100644 --- a/src/cobalt/content/icu/icudt56b/tr.res +++ b/src/cobalt/content/icu/icudt56b/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/translit/root.res b/src/cobalt/content/icu/icudt56b/translit/root.res index 4c17313..66fc787 100644 --- a/src/cobalt/content/icu/icudt56b/translit/root.res +++ b/src/cobalt/content/icu/icudt56b/translit/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/uk.res b/src/cobalt/content/icu/icudt56b/uk.res index 200454c..fb8f492 100644 --- a/src/cobalt/content/icu/icudt56b/uk.res +++ b/src/cobalt/content/icu/icudt56b/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/am.res b/src/cobalt/content/icu/icudt56b/unit/am.res index 292e986..a35df3b 100644 --- a/src/cobalt/content/icu/icudt56b/unit/am.res +++ b/src/cobalt/content/icu/icudt56b/unit/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ar.res b/src/cobalt/content/icu/icudt56b/unit/ar.res index f98995f..bebd1a9 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ar.res +++ b/src/cobalt/content/icu/icudt56b/unit/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/bg.res b/src/cobalt/content/icu/icudt56b/unit/bg.res index 1aca03a..602c66a 100644 --- a/src/cobalt/content/icu/icudt56b/unit/bg.res +++ b/src/cobalt/content/icu/icudt56b/unit/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/bn.res b/src/cobalt/content/icu/icudt56b/unit/bn.res index 7f04950..1f919d9 100644 --- a/src/cobalt/content/icu/icudt56b/unit/bn.res +++ b/src/cobalt/content/icu/icudt56b/unit/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ca.res b/src/cobalt/content/icu/icudt56b/unit/ca.res index 5f9e7d4..5845e5a 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ca.res +++ b/src/cobalt/content/icu/icudt56b/unit/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/cs.res b/src/cobalt/content/icu/icudt56b/unit/cs.res index 36876e6..e2d5bac 100644 --- a/src/cobalt/content/icu/icudt56b/unit/cs.res +++ b/src/cobalt/content/icu/icudt56b/unit/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/da.res b/src/cobalt/content/icu/icudt56b/unit/da.res index d9e774a..b0cb39c 100644 --- a/src/cobalt/content/icu/icudt56b/unit/da.res +++ b/src/cobalt/content/icu/icudt56b/unit/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/de.res b/src/cobalt/content/icu/icudt56b/unit/de.res index 28220da..c73d64f 100644 --- a/src/cobalt/content/icu/icudt56b/unit/de.res +++ b/src/cobalt/content/icu/icudt56b/unit/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/de_CH.res b/src/cobalt/content/icu/icudt56b/unit/de_CH.res index 65ad3f2..00504ca 100644 --- a/src/cobalt/content/icu/icudt56b/unit/de_CH.res +++ b/src/cobalt/content/icu/icudt56b/unit/de_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/el.res b/src/cobalt/content/icu/icudt56b/unit/el.res index 2e844d8..a1382e5 100644 --- a/src/cobalt/content/icu/icudt56b/unit/el.res +++ b/src/cobalt/content/icu/icudt56b/unit/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en.res b/src/cobalt/content/icu/icudt56b/unit/en.res index 3aae76a..01b89ae 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en.res +++ b/src/cobalt/content/icu/icudt56b/unit/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_001.res b/src/cobalt/content/icu/icudt56b/unit/en_001.res index 47d0e3b..a38707e 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_001.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_150.res b/src/cobalt/content/icu/icudt56b/unit/en_150.res index 56c4fc5..7df0c61 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_150.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_AU.res b/src/cobalt/content/icu/icudt56b/unit/en_AU.res index e299a73..2ac5f74 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_AU.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_CA.res b/src/cobalt/content/icu/icudt56b/unit/en_CA.res index 2312cfa..23a8c4d 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_CA.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_GB.res b/src/cobalt/content/icu/icudt56b/unit/en_GB.res index 12c6ad4..f4e4529 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_GB.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_IN.res b/src/cobalt/content/icu/icudt56b/unit/en_IN.res index 635ae39..24311e6 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_IN.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_NZ.res b/src/cobalt/content/icu/icudt56b/unit/en_NZ.res index 635ae39..24311e6 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_NZ.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/en_ZA.res b/src/cobalt/content/icu/icudt56b/unit/en_ZA.res index 635ae39..24311e6 100644 --- a/src/cobalt/content/icu/icudt56b/unit/en_ZA.res +++ b/src/cobalt/content/icu/icudt56b/unit/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es.res b/src/cobalt/content/icu/icudt56b/unit/es.res index ffe1f08..38489a7 100644 --- a/src/cobalt/content/icu/icudt56b/unit/es.res +++ b/src/cobalt/content/icu/icudt56b/unit/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_419.res b/src/cobalt/content/icu/icudt56b/unit/es_419.res index 472b17a..7dd5938 100644 --- a/src/cobalt/content/icu/icudt56b/unit/es_419.res +++ b/src/cobalt/content/icu/icudt56b/unit/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_AR.res b/src/cobalt/content/icu/icudt56b/unit/es_AR.res index 2321a20..45044ae 100644 --- a/src/cobalt/content/icu/icudt56b/unit/es_AR.res +++ b/src/cobalt/content/icu/icudt56b/unit/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_MX.res b/src/cobalt/content/icu/icudt56b/unit/es_MX.res index 1063a34..e52962f 100644 --- a/src/cobalt/content/icu/icudt56b/unit/es_MX.res +++ b/src/cobalt/content/icu/icudt56b/unit/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/es_US.res b/src/cobalt/content/icu/icudt56b/unit/es_US.res index 4d5b4c7..00f7bc4 100644 --- a/src/cobalt/content/icu/icudt56b/unit/es_US.res +++ b/src/cobalt/content/icu/icudt56b/unit/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/et.res b/src/cobalt/content/icu/icudt56b/unit/et.res index 4c4e707..07fc2e8 100644 --- a/src/cobalt/content/icu/icudt56b/unit/et.res +++ b/src/cobalt/content/icu/icudt56b/unit/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fa.res b/src/cobalt/content/icu/icudt56b/unit/fa.res index 7c9d93f..fbf7d22 100644 --- a/src/cobalt/content/icu/icudt56b/unit/fa.res +++ b/src/cobalt/content/icu/icudt56b/unit/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fi.res b/src/cobalt/content/icu/icudt56b/unit/fi.res index a6f4ffd..dd44aa6 100644 --- a/src/cobalt/content/icu/icudt56b/unit/fi.res +++ b/src/cobalt/content/icu/icudt56b/unit/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fil.res b/src/cobalt/content/icu/icudt56b/unit/fil.res index d37e0c9..592bf13 100644 --- a/src/cobalt/content/icu/icudt56b/unit/fil.res +++ b/src/cobalt/content/icu/icudt56b/unit/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fr.res b/src/cobalt/content/icu/icudt56b/unit/fr.res index ecd764f..0c34090 100644 --- a/src/cobalt/content/icu/icudt56b/unit/fr.res +++ b/src/cobalt/content/icu/icudt56b/unit/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/fr_CA.res b/src/cobalt/content/icu/icudt56b/unit/fr_CA.res index 6898c10..6d6aaba 100644 --- a/src/cobalt/content/icu/icudt56b/unit/fr_CA.res +++ b/src/cobalt/content/icu/icudt56b/unit/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/gu.res b/src/cobalt/content/icu/icudt56b/unit/gu.res index 7ee2a4f..938e994 100644 --- a/src/cobalt/content/icu/icudt56b/unit/gu.res +++ b/src/cobalt/content/icu/icudt56b/unit/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/he.res b/src/cobalt/content/icu/icudt56b/unit/he.res index ed32c30..b3f6b97 100644 --- a/src/cobalt/content/icu/icudt56b/unit/he.res +++ b/src/cobalt/content/icu/icudt56b/unit/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/hi.res b/src/cobalt/content/icu/icudt56b/unit/hi.res index 61a2fc7..7e48b52 100644 --- a/src/cobalt/content/icu/icudt56b/unit/hi.res +++ b/src/cobalt/content/icu/icudt56b/unit/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/hr.res b/src/cobalt/content/icu/icudt56b/unit/hr.res index 6d4ddca..9297739 100644 --- a/src/cobalt/content/icu/icudt56b/unit/hr.res +++ b/src/cobalt/content/icu/icudt56b/unit/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/hu.res b/src/cobalt/content/icu/icudt56b/unit/hu.res index eb21500..b790aed 100644 --- a/src/cobalt/content/icu/icudt56b/unit/hu.res +++ b/src/cobalt/content/icu/icudt56b/unit/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/id.res b/src/cobalt/content/icu/icudt56b/unit/id.res index e0f4875..0ecd0cd 100644 --- a/src/cobalt/content/icu/icudt56b/unit/id.res +++ b/src/cobalt/content/icu/icudt56b/unit/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/in.res b/src/cobalt/content/icu/icudt56b/unit/in.res index 073173b..01466da 100644 --- a/src/cobalt/content/icu/icudt56b/unit/in.res +++ b/src/cobalt/content/icu/icudt56b/unit/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/it.res b/src/cobalt/content/icu/icudt56b/unit/it.res index 116fa09..f2108bc 100644 --- a/src/cobalt/content/icu/icudt56b/unit/it.res +++ b/src/cobalt/content/icu/icudt56b/unit/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/iw.res b/src/cobalt/content/icu/icudt56b/unit/iw.res index 05e68f4..abb599a 100644 --- a/src/cobalt/content/icu/icudt56b/unit/iw.res +++ b/src/cobalt/content/icu/icudt56b/unit/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ja.res b/src/cobalt/content/icu/icudt56b/unit/ja.res index 2c04119..9156dab 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ja.res +++ b/src/cobalt/content/icu/icudt56b/unit/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/kn.res b/src/cobalt/content/icu/icudt56b/unit/kn.res index 4fc040c..540568c 100644 --- a/src/cobalt/content/icu/icudt56b/unit/kn.res +++ b/src/cobalt/content/icu/icudt56b/unit/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ko.res b/src/cobalt/content/icu/icudt56b/unit/ko.res index 4457504..9d6aaaa 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ko.res +++ b/src/cobalt/content/icu/icudt56b/unit/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/lt.res b/src/cobalt/content/icu/icudt56b/unit/lt.res index f55c0f3..e18752d 100644 --- a/src/cobalt/content/icu/icudt56b/unit/lt.res +++ b/src/cobalt/content/icu/icudt56b/unit/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/lv.res b/src/cobalt/content/icu/icudt56b/unit/lv.res index f151d02..04b478e 100644 --- a/src/cobalt/content/icu/icudt56b/unit/lv.res +++ b/src/cobalt/content/icu/icudt56b/unit/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ml.res b/src/cobalt/content/icu/icudt56b/unit/ml.res index d4eb433..94fa297 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ml.res +++ b/src/cobalt/content/icu/icudt56b/unit/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/mr.res b/src/cobalt/content/icu/icudt56b/unit/mr.res index 16a7673..357e525 100644 --- a/src/cobalt/content/icu/icudt56b/unit/mr.res +++ b/src/cobalt/content/icu/icudt56b/unit/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ms.res b/src/cobalt/content/icu/icudt56b/unit/ms.res index 7d2e715..a6fc007 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ms.res +++ b/src/cobalt/content/icu/icudt56b/unit/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/nb.res b/src/cobalt/content/icu/icudt56b/unit/nb.res index 455bf04..010b278 100644 --- a/src/cobalt/content/icu/icudt56b/unit/nb.res +++ b/src/cobalt/content/icu/icudt56b/unit/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/nl.res b/src/cobalt/content/icu/icudt56b/unit/nl.res index fa5887b..dc27465 100644 --- a/src/cobalt/content/icu/icudt56b/unit/nl.res +++ b/src/cobalt/content/icu/icudt56b/unit/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/no.res b/src/cobalt/content/icu/icudt56b/unit/no.res index b73c692..3d8e984 100644 --- a/src/cobalt/content/icu/icudt56b/unit/no.res +++ b/src/cobalt/content/icu/icudt56b/unit/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pl.res b/src/cobalt/content/icu/icudt56b/unit/pl.res index b0a8755..2e25fac 100644 --- a/src/cobalt/content/icu/icudt56b/unit/pl.res +++ b/src/cobalt/content/icu/icudt56b/unit/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pool.res b/src/cobalt/content/icu/icudt56b/unit/pool.res index f11a0e0..c65cd54 100644 --- a/src/cobalt/content/icu/icudt56b/unit/pool.res +++ b/src/cobalt/content/icu/icudt56b/unit/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pt.res b/src/cobalt/content/icu/icudt56b/unit/pt.res index d125bac..73168a1 100644 --- a/src/cobalt/content/icu/icudt56b/unit/pt.res +++ b/src/cobalt/content/icu/icudt56b/unit/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/pt_PT.res b/src/cobalt/content/icu/icudt56b/unit/pt_PT.res index 88c2270..276dd06 100644 --- a/src/cobalt/content/icu/icudt56b/unit/pt_PT.res +++ b/src/cobalt/content/icu/icudt56b/unit/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ro.res b/src/cobalt/content/icu/icudt56b/unit/ro.res index c83ed06..2a06311 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ro.res +++ b/src/cobalt/content/icu/icudt56b/unit/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/root.res b/src/cobalt/content/icu/icudt56b/unit/root.res index a29b95d..615d7e5 100644 --- a/src/cobalt/content/icu/icudt56b/unit/root.res +++ b/src/cobalt/content/icu/icudt56b/unit/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ru.res b/src/cobalt/content/icu/icudt56b/unit/ru.res index 7725656..fbece9b 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ru.res +++ b/src/cobalt/content/icu/icudt56b/unit/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sh.res b/src/cobalt/content/icu/icudt56b/unit/sh.res index d473968..96c0714 100644 --- a/src/cobalt/content/icu/icudt56b/unit/sh.res +++ b/src/cobalt/content/icu/icudt56b/unit/sh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sk.res b/src/cobalt/content/icu/icudt56b/unit/sk.res index c810d56..f3b61f8 100644 --- a/src/cobalt/content/icu/icudt56b/unit/sk.res +++ b/src/cobalt/content/icu/icudt56b/unit/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sl.res b/src/cobalt/content/icu/icudt56b/unit/sl.res index da21626..0d6f0f0 100644 --- a/src/cobalt/content/icu/icudt56b/unit/sl.res +++ b/src/cobalt/content/icu/icudt56b/unit/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sr.res b/src/cobalt/content/icu/icudt56b/unit/sr.res index 99cb318..f0053ba 100644 --- a/src/cobalt/content/icu/icudt56b/unit/sr.res +++ b/src/cobalt/content/icu/icudt56b/unit/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res b/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res index e14deae..6dfbf33 100644 --- a/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56b/unit/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sv.res b/src/cobalt/content/icu/icudt56b/unit/sv.res index 5e08842..33a4ca0 100644 --- a/src/cobalt/content/icu/icudt56b/unit/sv.res +++ b/src/cobalt/content/icu/icudt56b/unit/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/sw.res b/src/cobalt/content/icu/icudt56b/unit/sw.res index 0b20c40..fa27a7e 100644 --- a/src/cobalt/content/icu/icudt56b/unit/sw.res +++ b/src/cobalt/content/icu/icudt56b/unit/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/ta.res b/src/cobalt/content/icu/icudt56b/unit/ta.res index dd9f4ab..13041a5 100644 --- a/src/cobalt/content/icu/icudt56b/unit/ta.res +++ b/src/cobalt/content/icu/icudt56b/unit/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/te.res b/src/cobalt/content/icu/icudt56b/unit/te.res index 3082396..18e64af 100644 --- a/src/cobalt/content/icu/icudt56b/unit/te.res +++ b/src/cobalt/content/icu/icudt56b/unit/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/th.res b/src/cobalt/content/icu/icudt56b/unit/th.res index 9971f89..76ea951 100644 --- a/src/cobalt/content/icu/icudt56b/unit/th.res +++ b/src/cobalt/content/icu/icudt56b/unit/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/tl.res b/src/cobalt/content/icu/icudt56b/unit/tl.res index c1010d7..60f64fd 100644 --- a/src/cobalt/content/icu/icudt56b/unit/tl.res +++ b/src/cobalt/content/icu/icudt56b/unit/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/tr.res b/src/cobalt/content/icu/icudt56b/unit/tr.res index ca7aadd..73eb0fc 100644 --- a/src/cobalt/content/icu/icudt56b/unit/tr.res +++ b/src/cobalt/content/icu/icudt56b/unit/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/uk.res b/src/cobalt/content/icu/icudt56b/unit/uk.res index 58ff16c..3077a54 100644 --- a/src/cobalt/content/icu/icudt56b/unit/uk.res +++ b/src/cobalt/content/icu/icudt56b/unit/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/vi.res b/src/cobalt/content/icu/icudt56b/unit/vi.res index f19d427..856d66a 100644 --- a/src/cobalt/content/icu/icudt56b/unit/vi.res +++ b/src/cobalt/content/icu/icudt56b/unit/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh.res b/src/cobalt/content/icu/icudt56b/unit/zh.res index d5f901c..6daa4c1 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_CN.res b/src/cobalt/content/icu/icudt56b/unit/zh_CN.res index 8f439af..45cf266 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_CN.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_HK.res b/src/cobalt/content/icu/icudt56b/unit/zh_HK.res index a07da20..4d0916c 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_HK.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res index 66c86b9..85fc330 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res index 1786abd..bdef4bf 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res index ca6dcb9..78d7de5 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res index d9e19d1..f8405e6 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res index 725f53d..9b1162d 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res index 1786abd..bdef4bf 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_SG.res b/src/cobalt/content/icu/icudt56b/unit/zh_SG.res index e87b215..3cd5b1b 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_SG.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/unit/zh_TW.res b/src/cobalt/content/icu/icudt56b/unit/zh_TW.res index 1c39fca..1aac47e 100644 --- a/src/cobalt/content/icu/icudt56b/unit/zh_TW.res +++ b/src/cobalt/content/icu/icudt56b/unit/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/ur.res b/src/cobalt/content/icu/icudt56b/ur.res index b89e41a..dee9ed1 100644 --- a/src/cobalt/content/icu/icudt56b/ur.res +++ b/src/cobalt/content/icu/icudt56b/ur.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/uz.res b/src/cobalt/content/icu/icudt56b/uz.res index 95f2baa..25206c7 100644 --- a/src/cobalt/content/icu/icudt56b/uz.res +++ b/src/cobalt/content/icu/icudt56b/uz.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/vi.res b/src/cobalt/content/icu/icudt56b/vi.res index 28dd7cc..0f73fb7 100644 --- a/src/cobalt/content/icu/icudt56b/vi.res +++ b/src/cobalt/content/icu/icudt56b/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/wa.res b/src/cobalt/content/icu/icudt56b/wa.res index 35aa148..e9311b4 100644 --- a/src/cobalt/content/icu/icudt56b/wa.res +++ b/src/cobalt/content/icu/icudt56b/wa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/yo.res b/src/cobalt/content/icu/icudt56b/yo.res index 622dd60..070063d 100644 --- a/src/cobalt/content/icu/icudt56b/yo.res +++ b/src/cobalt/content/icu/icudt56b/yo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh.res b/src/cobalt/content/icu/icudt56b/zh.res index 3f8f599..7d2ecf2 100644 --- a/src/cobalt/content/icu/icudt56b/zh.res +++ b/src/cobalt/content/icu/icudt56b/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_CN.res b/src/cobalt/content/icu/icudt56b/zh_CN.res index d366b9e..1b8f7db 100644 --- a/src/cobalt/content/icu/icudt56b/zh_CN.res +++ b/src/cobalt/content/icu/icudt56b/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_HK.res b/src/cobalt/content/icu/icudt56b/zh_HK.res index 7432644..9e8894a 100644 --- a/src/cobalt/content/icu/icudt56b/zh_HK.res +++ b/src/cobalt/content/icu/icudt56b/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hans.res b/src/cobalt/content/icu/icudt56b/zh_Hans.res index 0c29168..7a2eb6d 100644 --- a/src/cobalt/content/icu/icudt56b/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56b/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res index 0c29168..7a2eb6d 100644 --- a/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56b/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res index 2d2d350..6e1a433 100644 --- a/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56b/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hant.res b/src/cobalt/content/icu/icudt56b/zh_Hant.res index 7d655fa..0bfaa77 100644 --- a/src/cobalt/content/icu/icudt56b/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56b/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res index f4f8ce4..a0b017d 100644 --- a/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56b/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res index 0c29168..7a2eb6d 100644 --- a/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56b/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_SG.res b/src/cobalt/content/icu/icudt56b/zh_SG.res index 720eed1..a0b68a9 100644 --- a/src/cobalt/content/icu/icudt56b/zh_SG.res +++ b/src/cobalt/content/icu/icudt56b/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zh_TW.res b/src/cobalt/content/icu/icudt56b/zh_TW.res index f7a32b9..0dff169 100644 --- a/src/cobalt/content/icu/icudt56b/zh_TW.res +++ b/src/cobalt/content/icu/icudt56b/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/am.res b/src/cobalt/content/icu/icudt56b/zone/am.res index ecdf5a6..8d19975 100644 --- a/src/cobalt/content/icu/icudt56b/zone/am.res +++ b/src/cobalt/content/icu/icudt56b/zone/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ar.res b/src/cobalt/content/icu/icudt56b/zone/ar.res index 90bf7d1..d71faf3 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ar.res +++ b/src/cobalt/content/icu/icudt56b/zone/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/bg.res b/src/cobalt/content/icu/icudt56b/zone/bg.res index 1e3b8b7..226554b 100644 --- a/src/cobalt/content/icu/icudt56b/zone/bg.res +++ b/src/cobalt/content/icu/icudt56b/zone/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/bn.res b/src/cobalt/content/icu/icudt56b/zone/bn.res index 1bfd7d3..83c397b 100644 --- a/src/cobalt/content/icu/icudt56b/zone/bn.res +++ b/src/cobalt/content/icu/icudt56b/zone/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ca.res b/src/cobalt/content/icu/icudt56b/zone/ca.res index 60a5a33..2fb72fb 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ca.res +++ b/src/cobalt/content/icu/icudt56b/zone/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/cs.res b/src/cobalt/content/icu/icudt56b/zone/cs.res index bcd686e..905fdde 100644 --- a/src/cobalt/content/icu/icudt56b/zone/cs.res +++ b/src/cobalt/content/icu/icudt56b/zone/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/da.res b/src/cobalt/content/icu/icudt56b/zone/da.res index 47df657..9080b79 100644 --- a/src/cobalt/content/icu/icudt56b/zone/da.res +++ b/src/cobalt/content/icu/icudt56b/zone/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/de.res b/src/cobalt/content/icu/icudt56b/zone/de.res index e9a0bcd..913e3f2 100644 --- a/src/cobalt/content/icu/icudt56b/zone/de.res +++ b/src/cobalt/content/icu/icudt56b/zone/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/el.res b/src/cobalt/content/icu/icudt56b/zone/el.res index 16e754a..76d3839 100644 --- a/src/cobalt/content/icu/icudt56b/zone/el.res +++ b/src/cobalt/content/icu/icudt56b/zone/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en.res b/src/cobalt/content/icu/icudt56b/zone/en.res index 54e5bd2..c5af6cc 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en.res +++ b/src/cobalt/content/icu/icudt56b/zone/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_001.res b/src/cobalt/content/icu/icudt56b/zone/en_001.res index 8a5dc2f..d57ca5b 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_001.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_150.res b/src/cobalt/content/icu/icudt56b/zone/en_150.res index ddebb42..ba3ce45 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_150.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_AU.res b/src/cobalt/content/icu/icudt56b/zone/en_AU.res index a8735c5..23645e7 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_AU.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_CA.res b/src/cobalt/content/icu/icudt56b/zone/en_CA.res index 4e338d4..1bac93c 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_CA.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_GB.res b/src/cobalt/content/icu/icudt56b/zone/en_GB.res index 264b11d..2754391 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_GB.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_IN.res b/src/cobalt/content/icu/icudt56b/zone/en_IN.res index 70a1809..05a0947 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_IN.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_NZ.res b/src/cobalt/content/icu/icudt56b/zone/en_NZ.res index b1e0e1f..05cc670 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_NZ.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/en_ZA.res b/src/cobalt/content/icu/icudt56b/zone/en_ZA.res index 3b9c2d9..c2c2087 100644 --- a/src/cobalt/content/icu/icudt56b/zone/en_ZA.res +++ b/src/cobalt/content/icu/icudt56b/zone/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es.res b/src/cobalt/content/icu/icudt56b/zone/es.res index 0b7f828..21642cd 100644 --- a/src/cobalt/content/icu/icudt56b/zone/es.res +++ b/src/cobalt/content/icu/icudt56b/zone/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_419.res b/src/cobalt/content/icu/icudt56b/zone/es_419.res index 6a92ba0..90121e1 100644 --- a/src/cobalt/content/icu/icudt56b/zone/es_419.res +++ b/src/cobalt/content/icu/icudt56b/zone/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_AR.res b/src/cobalt/content/icu/icudt56b/zone/es_AR.res index 487b16f..b824e1a 100644 --- a/src/cobalt/content/icu/icudt56b/zone/es_AR.res +++ b/src/cobalt/content/icu/icudt56b/zone/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_MX.res b/src/cobalt/content/icu/icudt56b/zone/es_MX.res index 6fbc5cc..229f469 100644 --- a/src/cobalt/content/icu/icudt56b/zone/es_MX.res +++ b/src/cobalt/content/icu/icudt56b/zone/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/es_US.res b/src/cobalt/content/icu/icudt56b/zone/es_US.res index 6008b97..3e42ce2 100644 --- a/src/cobalt/content/icu/icudt56b/zone/es_US.res +++ b/src/cobalt/content/icu/icudt56b/zone/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/et.res b/src/cobalt/content/icu/icudt56b/zone/et.res index 4e38bb0..6882e8c 100644 --- a/src/cobalt/content/icu/icudt56b/zone/et.res +++ b/src/cobalt/content/icu/icudt56b/zone/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fa.res b/src/cobalt/content/icu/icudt56b/zone/fa.res index d6d73bf..335ea68 100644 --- a/src/cobalt/content/icu/icudt56b/zone/fa.res +++ b/src/cobalt/content/icu/icudt56b/zone/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fi.res b/src/cobalt/content/icu/icudt56b/zone/fi.res index e5e130f..652f440 100644 --- a/src/cobalt/content/icu/icudt56b/zone/fi.res +++ b/src/cobalt/content/icu/icudt56b/zone/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fil.res b/src/cobalt/content/icu/icudt56b/zone/fil.res index 53bebf4..411f4c4 100644 --- a/src/cobalt/content/icu/icudt56b/zone/fil.res +++ b/src/cobalt/content/icu/icudt56b/zone/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fr.res b/src/cobalt/content/icu/icudt56b/zone/fr.res index 8a69d68..5ffd2c7 100644 --- a/src/cobalt/content/icu/icudt56b/zone/fr.res +++ b/src/cobalt/content/icu/icudt56b/zone/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/fr_CA.res b/src/cobalt/content/icu/icudt56b/zone/fr_CA.res index fadc1ad..2a97cb4 100644 --- a/src/cobalt/content/icu/icudt56b/zone/fr_CA.res +++ b/src/cobalt/content/icu/icudt56b/zone/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/gu.res b/src/cobalt/content/icu/icudt56b/zone/gu.res index a2e1968..6363c38 100644 --- a/src/cobalt/content/icu/icudt56b/zone/gu.res +++ b/src/cobalt/content/icu/icudt56b/zone/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/he.res b/src/cobalt/content/icu/icudt56b/zone/he.res index 5c0a02b..eb383e7 100644 --- a/src/cobalt/content/icu/icudt56b/zone/he.res +++ b/src/cobalt/content/icu/icudt56b/zone/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/hi.res b/src/cobalt/content/icu/icudt56b/zone/hi.res index 6a382f2..d79080b 100644 --- a/src/cobalt/content/icu/icudt56b/zone/hi.res +++ b/src/cobalt/content/icu/icudt56b/zone/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/hr.res b/src/cobalt/content/icu/icudt56b/zone/hr.res index d6178cf..31121f4 100644 --- a/src/cobalt/content/icu/icudt56b/zone/hr.res +++ b/src/cobalt/content/icu/icudt56b/zone/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/hu.res b/src/cobalt/content/icu/icudt56b/zone/hu.res index 5e20524..d18a8e9 100644 --- a/src/cobalt/content/icu/icudt56b/zone/hu.res +++ b/src/cobalt/content/icu/icudt56b/zone/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/id.res b/src/cobalt/content/icu/icudt56b/zone/id.res index daea9ba..56dddb4 100644 --- a/src/cobalt/content/icu/icudt56b/zone/id.res +++ b/src/cobalt/content/icu/icudt56b/zone/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/in.res b/src/cobalt/content/icu/icudt56b/zone/in.res index 688b635..b0f0504 100644 --- a/src/cobalt/content/icu/icudt56b/zone/in.res +++ b/src/cobalt/content/icu/icudt56b/zone/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/it.res b/src/cobalt/content/icu/icudt56b/zone/it.res index 6a2499d..804ab13 100644 --- a/src/cobalt/content/icu/icudt56b/zone/it.res +++ b/src/cobalt/content/icu/icudt56b/zone/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/iw.res b/src/cobalt/content/icu/icudt56b/zone/iw.res index 2302404..de6dc2a 100644 --- a/src/cobalt/content/icu/icudt56b/zone/iw.res +++ b/src/cobalt/content/icu/icudt56b/zone/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ja.res b/src/cobalt/content/icu/icudt56b/zone/ja.res index 009c899..3ef3a97 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ja.res +++ b/src/cobalt/content/icu/icudt56b/zone/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/kn.res b/src/cobalt/content/icu/icudt56b/zone/kn.res index 5ceecc8..78f7c1c 100644 --- a/src/cobalt/content/icu/icudt56b/zone/kn.res +++ b/src/cobalt/content/icu/icudt56b/zone/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ko.res b/src/cobalt/content/icu/icudt56b/zone/ko.res index 9815828..92140a3 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ko.res +++ b/src/cobalt/content/icu/icudt56b/zone/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/lt.res b/src/cobalt/content/icu/icudt56b/zone/lt.res index 59156b4..d35f2b8 100644 --- a/src/cobalt/content/icu/icudt56b/zone/lt.res +++ b/src/cobalt/content/icu/icudt56b/zone/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/lv.res b/src/cobalt/content/icu/icudt56b/zone/lv.res index bc23fa3..c80f5e8 100644 --- a/src/cobalt/content/icu/icudt56b/zone/lv.res +++ b/src/cobalt/content/icu/icudt56b/zone/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ml.res b/src/cobalt/content/icu/icudt56b/zone/ml.res index 2b45bfc..5e1fa15 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ml.res +++ b/src/cobalt/content/icu/icudt56b/zone/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/mr.res b/src/cobalt/content/icu/icudt56b/zone/mr.res index e15dff2..d01a7f4 100644 --- a/src/cobalt/content/icu/icudt56b/zone/mr.res +++ b/src/cobalt/content/icu/icudt56b/zone/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ms.res b/src/cobalt/content/icu/icudt56b/zone/ms.res index 3d455e4..df8f19f 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ms.res +++ b/src/cobalt/content/icu/icudt56b/zone/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/nb.res b/src/cobalt/content/icu/icudt56b/zone/nb.res index 89aeb11..ef6dfde 100644 --- a/src/cobalt/content/icu/icudt56b/zone/nb.res +++ b/src/cobalt/content/icu/icudt56b/zone/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/nl.res b/src/cobalt/content/icu/icudt56b/zone/nl.res index a331fb4..965756c 100644 --- a/src/cobalt/content/icu/icudt56b/zone/nl.res +++ b/src/cobalt/content/icu/icudt56b/zone/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/no.res b/src/cobalt/content/icu/icudt56b/zone/no.res index 1d2ff18..449c0c1 100644 --- a/src/cobalt/content/icu/icudt56b/zone/no.res +++ b/src/cobalt/content/icu/icudt56b/zone/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pl.res b/src/cobalt/content/icu/icudt56b/zone/pl.res index 10bc3fc..dea3693 100644 --- a/src/cobalt/content/icu/icudt56b/zone/pl.res +++ b/src/cobalt/content/icu/icudt56b/zone/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pool.res b/src/cobalt/content/icu/icudt56b/zone/pool.res index 8738534..0e00d90 100644 --- a/src/cobalt/content/icu/icudt56b/zone/pool.res +++ b/src/cobalt/content/icu/icudt56b/zone/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pt.res b/src/cobalt/content/icu/icudt56b/zone/pt.res index f443cd0..79dbf18 100644 --- a/src/cobalt/content/icu/icudt56b/zone/pt.res +++ b/src/cobalt/content/icu/icudt56b/zone/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/pt_PT.res b/src/cobalt/content/icu/icudt56b/zone/pt_PT.res index 83f2189..7d596ea 100644 --- a/src/cobalt/content/icu/icudt56b/zone/pt_PT.res +++ b/src/cobalt/content/icu/icudt56b/zone/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ro.res b/src/cobalt/content/icu/icudt56b/zone/ro.res index 8a56e8f..69a591e 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ro.res +++ b/src/cobalt/content/icu/icudt56b/zone/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/root.res b/src/cobalt/content/icu/icudt56b/zone/root.res index 2f519c3..23983bb 100644 --- a/src/cobalt/content/icu/icudt56b/zone/root.res +++ b/src/cobalt/content/icu/icudt56b/zone/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ru.res b/src/cobalt/content/icu/icudt56b/zone/ru.res index e2c9787..2931c15 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ru.res +++ b/src/cobalt/content/icu/icudt56b/zone/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sk.res b/src/cobalt/content/icu/icudt56b/zone/sk.res index 26d150c..9efb8af 100644 --- a/src/cobalt/content/icu/icudt56b/zone/sk.res +++ b/src/cobalt/content/icu/icudt56b/zone/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sl.res b/src/cobalt/content/icu/icudt56b/zone/sl.res index f808cf0..28abb1f 100644 --- a/src/cobalt/content/icu/icudt56b/zone/sl.res +++ b/src/cobalt/content/icu/icudt56b/zone/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sr.res b/src/cobalt/content/icu/icudt56b/zone/sr.res index 6420fc2..d8a33b1 100644 --- a/src/cobalt/content/icu/icudt56b/zone/sr.res +++ b/src/cobalt/content/icu/icudt56b/zone/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sv.res b/src/cobalt/content/icu/icudt56b/zone/sv.res index ba29b46..ad8ded4 100644 --- a/src/cobalt/content/icu/icudt56b/zone/sv.res +++ b/src/cobalt/content/icu/icudt56b/zone/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/sw.res b/src/cobalt/content/icu/icudt56b/zone/sw.res index b9dd514..b050d1b 100644 --- a/src/cobalt/content/icu/icudt56b/zone/sw.res +++ b/src/cobalt/content/icu/icudt56b/zone/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/ta.res b/src/cobalt/content/icu/icudt56b/zone/ta.res index a2133b6..78be1b5 100644 --- a/src/cobalt/content/icu/icudt56b/zone/ta.res +++ b/src/cobalt/content/icu/icudt56b/zone/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/te.res b/src/cobalt/content/icu/icudt56b/zone/te.res index e98f297..339dba7 100644 --- a/src/cobalt/content/icu/icudt56b/zone/te.res +++ b/src/cobalt/content/icu/icudt56b/zone/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/th.res b/src/cobalt/content/icu/icudt56b/zone/th.res index 280414c..72fc122 100644 --- a/src/cobalt/content/icu/icudt56b/zone/th.res +++ b/src/cobalt/content/icu/icudt56b/zone/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/tr.res b/src/cobalt/content/icu/icudt56b/zone/tr.res index 75e59ef..abc50c8 100644 --- a/src/cobalt/content/icu/icudt56b/zone/tr.res +++ b/src/cobalt/content/icu/icudt56b/zone/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res b/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res index ec5b930..8b8fcad 100644 --- a/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res +++ b/src/cobalt/content/icu/icudt56b/zone/tzdbNames.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/uk.res b/src/cobalt/content/icu/icudt56b/zone/uk.res index a71b8e1..ce3f5b3 100644 --- a/src/cobalt/content/icu/icudt56b/zone/uk.res +++ b/src/cobalt/content/icu/icudt56b/zone/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/vi.res b/src/cobalt/content/icu/icudt56b/zone/vi.res index d22c37a..25807e2 100644 --- a/src/cobalt/content/icu/icudt56b/zone/vi.res +++ b/src/cobalt/content/icu/icudt56b/zone/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh.res b/src/cobalt/content/icu/icudt56b/zone/zh.res index a2553cb..7a99c76 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_CN.res b/src/cobalt/content/icu/icudt56b/zone/zh_CN.res index 300fdf6..ec46635 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_CN.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_HK.res b/src/cobalt/content/icu/icudt56b/zone/zh_HK.res index 4016633..fe81e04 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_HK.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res index 587229d..b48bd9c 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res index 2f1a4b5..3e5b7e0 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res index 3b199b9..73b46ba 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res index 2bb3aa3..80e2d84 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res index 9bc0748..c32662a 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res index 2f1a4b5..3e5b7e0 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_SG.res b/src/cobalt/content/icu/icudt56b/zone/zh_SG.res index 3d32d68..9a6d40e 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_SG.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zone/zh_TW.res b/src/cobalt/content/icu/icudt56b/zone/zh_TW.res index b7bc97e..403b5a8 100644 --- a/src/cobalt/content/icu/icudt56b/zone/zh_TW.res +++ b/src/cobalt/content/icu/icudt56b/zone/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56b/zu.res b/src/cobalt/content/icu/icudt56b/zu.res index ce67f86..15cdcff 100644 --- a/src/cobalt/content/icu/icudt56b/zu.res +++ b/src/cobalt/content/icu/icudt56b/zu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/af.res b/src/cobalt/content/icu/icudt56l/af.res index c10dff1..7d0f080 100644 --- a/src/cobalt/content/icu/icudt56l/af.res +++ b/src/cobalt/content/icu/icudt56l/af.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ak.res b/src/cobalt/content/icu/icudt56l/ak.res index 38c65e8..a2f7b87 100644 --- a/src/cobalt/content/icu/icudt56l/ak.res +++ b/src/cobalt/content/icu/icudt56l/ak.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/am.res b/src/cobalt/content/icu/icudt56l/am.res index 5057758..74dc8d2 100644 --- a/src/cobalt/content/icu/icudt56l/am.res +++ b/src/cobalt/content/icu/icudt56l/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/an.res b/src/cobalt/content/icu/icudt56l/an.res index d25cfda..6faff72 100644 --- a/src/cobalt/content/icu/icudt56l/an.res +++ b/src/cobalt/content/icu/icudt56l/an.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ar.res b/src/cobalt/content/icu/icudt56l/ar.res index 9ef2045..474e7927 100644 --- a/src/cobalt/content/icu/icudt56l/ar.res +++ b/src/cobalt/content/icu/icudt56l/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ast.res b/src/cobalt/content/icu/icudt56l/ast.res index ee47109..5812754 100644 --- a/src/cobalt/content/icu/icudt56l/ast.res +++ b/src/cobalt/content/icu/icudt56l/ast.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/az.res b/src/cobalt/content/icu/icudt56l/az.res index e1470c0..259dcba 100644 --- a/src/cobalt/content/icu/icudt56l/az.res +++ b/src/cobalt/content/icu/icudt56l/az.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/be.res b/src/cobalt/content/icu/icudt56l/be.res index b70175a..4f3efa9 100644 --- a/src/cobalt/content/icu/icudt56l/be.res +++ b/src/cobalt/content/icu/icudt56l/be.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bem.res b/src/cobalt/content/icu/icudt56l/bem.res index db42942..f2c0f8a 100644 --- a/src/cobalt/content/icu/icudt56l/bem.res +++ b/src/cobalt/content/icu/icudt56l/bem.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bg.res b/src/cobalt/content/icu/icudt56l/bg.res index 2a45166..460af4f 100644 --- a/src/cobalt/content/icu/icudt56l/bg.res +++ b/src/cobalt/content/icu/icudt56l/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bn.res b/src/cobalt/content/icu/icudt56l/bn.res index e1deb82..c1988d5 100644 --- a/src/cobalt/content/icu/icudt56l/bn.res +++ b/src/cobalt/content/icu/icudt56l/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/br.res b/src/cobalt/content/icu/icudt56l/br.res index b3fd0fa..4928119 100644 --- a/src/cobalt/content/icu/icudt56l/br.res +++ b/src/cobalt/content/icu/icudt56l/br.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/bs.res b/src/cobalt/content/icu/icudt56l/bs.res index e7f1481..4cb47ea 100644 --- a/src/cobalt/content/icu/icudt56l/bs.res +++ b/src/cobalt/content/icu/icudt56l/bs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ca.res b/src/cobalt/content/icu/icudt56l/ca.res index 3ef57e3..2b42ab7 100644 --- a/src/cobalt/content/icu/icudt56l/ca.res +++ b/src/cobalt/content/icu/icudt56l/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ckb.res b/src/cobalt/content/icu/icudt56l/ckb.res index 3074461..190b2bd 100644 --- a/src/cobalt/content/icu/icudt56l/ckb.res +++ b/src/cobalt/content/icu/icudt56l/ckb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ar.res b/src/cobalt/content/icu/icudt56l/coll/ar.res index e2f94ca..860e431 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ar.res +++ b/src/cobalt/content/icu/icudt56l/coll/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/bg.res b/src/cobalt/content/icu/icudt56l/coll/bg.res index 671f9b1..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/bg.res +++ b/src/cobalt/content/icu/icudt56l/coll/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/bn.res b/src/cobalt/content/icu/icudt56l/coll/bn.res index c2d025b..1466600 100644 --- a/src/cobalt/content/icu/icudt56l/coll/bn.res +++ b/src/cobalt/content/icu/icudt56l/coll/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ca.res b/src/cobalt/content/icu/icudt56l/coll/ca.res index 94e09da..8f9c047 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ca.res +++ b/src/cobalt/content/icu/icudt56l/coll/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/cs.res b/src/cobalt/content/icu/icudt56l/coll/cs.res index af17fc9..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/cs.res +++ b/src/cobalt/content/icu/icudt56l/coll/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/da.res b/src/cobalt/content/icu/icudt56l/coll/da.res index eec8a2f..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/da.res +++ b/src/cobalt/content/icu/icudt56l/coll/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/de.res b/src/cobalt/content/icu/icudt56l/coll/de.res index 42d0fed..28c8794 100644 --- a/src/cobalt/content/icu/icudt56l/coll/de.res +++ b/src/cobalt/content/icu/icudt56l/coll/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/de_AT.res b/src/cobalt/content/icu/icudt56l/coll/de_AT.res index 8a598af..8bcbf4c 100644 --- a/src/cobalt/content/icu/icudt56l/coll/de_AT.res +++ b/src/cobalt/content/icu/icudt56l/coll/de_AT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/el.res b/src/cobalt/content/icu/icudt56l/coll/el.res index 4190b25..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/el.res +++ b/src/cobalt/content/icu/icudt56l/coll/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/es.res b/src/cobalt/content/icu/icudt56l/coll/es.res index 0924aa2..be6fa50 100644 --- a/src/cobalt/content/icu/icudt56l/coll/es.res +++ b/src/cobalt/content/icu/icudt56l/coll/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/et.res b/src/cobalt/content/icu/icudt56l/coll/et.res index 435d204..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/et.res +++ b/src/cobalt/content/icu/icudt56l/coll/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fa.res b/src/cobalt/content/icu/icudt56l/coll/fa.res index 77d20bf..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/fa.res +++ b/src/cobalt/content/icu/icudt56l/coll/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fi.res b/src/cobalt/content/icu/icudt56l/coll/fi.res index d4545cb..be6fa50 100644 --- a/src/cobalt/content/icu/icudt56l/coll/fi.res +++ b/src/cobalt/content/icu/icudt56l/coll/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fil.res b/src/cobalt/content/icu/icudt56l/coll/fil.res index 9bbe4fa..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/fil.res +++ b/src/cobalt/content/icu/icudt56l/coll/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/fr_CA.res b/src/cobalt/content/icu/icudt56l/coll/fr_CA.res index faf3f21..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/fr_CA.res +++ b/src/cobalt/content/icu/icudt56l/coll/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/gu.res b/src/cobalt/content/icu/icudt56l/coll/gu.res index e131aac..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/gu.res +++ b/src/cobalt/content/icu/icudt56l/coll/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/he.res b/src/cobalt/content/icu/icudt56l/coll/he.res index 270a0d6..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/he.res +++ b/src/cobalt/content/icu/icudt56l/coll/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/hi.res b/src/cobalt/content/icu/icudt56l/coll/hi.res index 1ab090a..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/hi.res +++ b/src/cobalt/content/icu/icudt56l/coll/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/hr.res b/src/cobalt/content/icu/icudt56l/coll/hr.res index 360d336..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/hr.res +++ b/src/cobalt/content/icu/icudt56l/coll/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/hu.res b/src/cobalt/content/icu/icudt56l/coll/hu.res index 8de940f..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/hu.res +++ b/src/cobalt/content/icu/icudt56l/coll/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ja.res b/src/cobalt/content/icu/icudt56l/coll/ja.res index 531a1f3..698d0e6 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ja.res +++ b/src/cobalt/content/icu/icudt56l/coll/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/kn.res b/src/cobalt/content/icu/icudt56l/coll/kn.res index 8fd0fd6..1466600 100644 --- a/src/cobalt/content/icu/icudt56l/coll/kn.res +++ b/src/cobalt/content/icu/icudt56l/coll/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ko.res b/src/cobalt/content/icu/icudt56l/coll/ko.res index 8f87327..4587fa1 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ko.res +++ b/src/cobalt/content/icu/icudt56l/coll/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/lt.res b/src/cobalt/content/icu/icudt56l/coll/lt.res index df61039..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/lt.res +++ b/src/cobalt/content/icu/icudt56l/coll/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/lv.res b/src/cobalt/content/icu/icudt56l/coll/lv.res index 13c655e..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/lv.res +++ b/src/cobalt/content/icu/icudt56l/coll/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ml.res b/src/cobalt/content/icu/icudt56l/coll/ml.res index 26e09f3..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ml.res +++ b/src/cobalt/content/icu/icudt56l/coll/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/mr.res b/src/cobalt/content/icu/icudt56l/coll/mr.res index f4d2cc1..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/mr.res +++ b/src/cobalt/content/icu/icudt56l/coll/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/nb.res b/src/cobalt/content/icu/icudt56l/coll/nb.res index fdc51f7..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/nb.res +++ b/src/cobalt/content/icu/icudt56l/coll/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/nn.res b/src/cobalt/content/icu/icudt56l/coll/nn.res index fdc51f7..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/nn.res +++ b/src/cobalt/content/icu/icudt56l/coll/nn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/pl.res b/src/cobalt/content/icu/icudt56l/coll/pl.res index 4858e5a..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/pl.res +++ b/src/cobalt/content/icu/icudt56l/coll/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ro.res b/src/cobalt/content/icu/icudt56l/coll/ro.res index 1ea81ae..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ro.res +++ b/src/cobalt/content/icu/icudt56l/coll/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/root.res b/src/cobalt/content/icu/icudt56l/coll/root.res index b01bb24..98ee81b 100644 --- a/src/cobalt/content/icu/icudt56l/coll/root.res +++ b/src/cobalt/content/icu/icudt56l/coll/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ru.res b/src/cobalt/content/icu/icudt56l/coll/ru.res index 671f9b1..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ru.res +++ b/src/cobalt/content/icu/icudt56l/coll/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sk.res b/src/cobalt/content/icu/icudt56l/coll/sk.res index 082406d..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/sk.res +++ b/src/cobalt/content/icu/icudt56l/coll/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sl.res b/src/cobalt/content/icu/icudt56l/coll/sl.res index 6f173e1..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/sl.res +++ b/src/cobalt/content/icu/icudt56l/coll/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sr.res b/src/cobalt/content/icu/icudt56l/coll/sr.res index 4c166cc..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/sr.res +++ b/src/cobalt/content/icu/icudt56l/coll/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res b/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res index 360d336..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56l/coll/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/sv.res b/src/cobalt/content/icu/icudt56l/coll/sv.res index 97305c2..b4f08b9 100644 --- a/src/cobalt/content/icu/icudt56l/coll/sv.res +++ b/src/cobalt/content/icu/icudt56l/coll/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/ta.res b/src/cobalt/content/icu/icudt56l/coll/ta.res index 95b6947..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/ta.res +++ b/src/cobalt/content/icu/icudt56l/coll/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/te.res b/src/cobalt/content/icu/icudt56l/coll/te.res index 93e0bd8..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/te.res +++ b/src/cobalt/content/icu/icudt56l/coll/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/th.res b/src/cobalt/content/icu/icudt56l/coll/th.res index de60121..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/th.res +++ b/src/cobalt/content/icu/icudt56l/coll/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/tr.res b/src/cobalt/content/icu/icudt56l/coll/tr.res index c51837b..6b71925 100644 --- a/src/cobalt/content/icu/icudt56l/coll/tr.res +++ b/src/cobalt/content/icu/icudt56l/coll/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/uk.res b/src/cobalt/content/icu/icudt56l/coll/uk.res index 90239f6..610281e 100644 --- a/src/cobalt/content/icu/icudt56l/coll/uk.res +++ b/src/cobalt/content/icu/icudt56l/coll/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/vi.res b/src/cobalt/content/icu/icudt56l/coll/vi.res index 906ef33..1466600 100644 --- a/src/cobalt/content/icu/icudt56l/coll/vi.res +++ b/src/cobalt/content/icu/icudt56l/coll/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/coll/zh.res b/src/cobalt/content/icu/icudt56l/coll/zh.res index 14d076c..cf84785 100644 --- a/src/cobalt/content/icu/icudt56l/coll/zh.res +++ b/src/cobalt/content/icu/icudt56l/coll/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/cs.res b/src/cobalt/content/icu/icudt56l/cs.res index 09ea881..b643760 100644 --- a/src/cobalt/content/icu/icudt56l/cs.res +++ b/src/cobalt/content/icu/icudt56l/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/am.res b/src/cobalt/content/icu/icudt56l/curr/am.res index d29ad5d..c699256 100644 --- a/src/cobalt/content/icu/icudt56l/curr/am.res +++ b/src/cobalt/content/icu/icudt56l/curr/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ar.res b/src/cobalt/content/icu/icudt56l/curr/ar.res index 77a62e9..824ff84 100644 --- a/src/cobalt/content/icu/icudt56l/curr/ar.res +++ b/src/cobalt/content/icu/icudt56l/curr/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/bg.res b/src/cobalt/content/icu/icudt56l/curr/bg.res index 52f8374..2c0a02a 100644 --- a/src/cobalt/content/icu/icudt56l/curr/bg.res +++ b/src/cobalt/content/icu/icudt56l/curr/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ca.res b/src/cobalt/content/icu/icudt56l/curr/ca.res index 24b4a8f..c2837c3 100644 --- a/src/cobalt/content/icu/icudt56l/curr/ca.res +++ b/src/cobalt/content/icu/icudt56l/curr/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/cs.res b/src/cobalt/content/icu/icudt56l/curr/cs.res index 81651e2..109596a 100644 --- a/src/cobalt/content/icu/icudt56l/curr/cs.res +++ b/src/cobalt/content/icu/icudt56l/curr/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/da.res b/src/cobalt/content/icu/icudt56l/curr/da.res index d7aa6cb..9a6bf36 100644 --- a/src/cobalt/content/icu/icudt56l/curr/da.res +++ b/src/cobalt/content/icu/icudt56l/curr/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/de.res b/src/cobalt/content/icu/icudt56l/curr/de.res index f9e3149..6e731e7 100644 --- a/src/cobalt/content/icu/icudt56l/curr/de.res +++ b/src/cobalt/content/icu/icudt56l/curr/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/de_CH.res b/src/cobalt/content/icu/icudt56l/curr/de_CH.res index 48a1a39..72cf49b 100644 --- a/src/cobalt/content/icu/icudt56l/curr/de_CH.res +++ b/src/cobalt/content/icu/icudt56l/curr/de_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/el.res b/src/cobalt/content/icu/icudt56l/curr/el.res index 18963be..203dc21 100644 --- a/src/cobalt/content/icu/icudt56l/curr/el.res +++ b/src/cobalt/content/icu/icudt56l/curr/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en.res b/src/cobalt/content/icu/icudt56l/curr/en.res index 811bdc6..b78dd5c 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en.res +++ b/src/cobalt/content/icu/icudt56l/curr/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_001.res b/src/cobalt/content/icu/icudt56l/curr/en_001.res index a11d32a..7c956d8 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_001.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_150.res b/src/cobalt/content/icu/icudt56l/curr/en_150.res index 652676e..18f73dd 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_150.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_AU.res b/src/cobalt/content/icu/icudt56l/curr/en_AU.res index 62e8a60..8f30277 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_AU.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_CA.res b/src/cobalt/content/icu/icudt56l/curr/en_CA.res index fce360b..97b6a41 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_CA.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_GB.res b/src/cobalt/content/icu/icudt56l/curr/en_GB.res index 73c4d73..5da4594 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_GB.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_IN.res b/src/cobalt/content/icu/icudt56l/curr/en_IN.res index 3cb138e..5ffbeed 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_IN.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_NZ.res b/src/cobalt/content/icu/icudt56l/curr/en_NZ.res index f18ccaf..2362d04 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_NZ.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/en_ZA.res b/src/cobalt/content/icu/icudt56l/curr/en_ZA.res index 16c361d..ba034a5 100644 --- a/src/cobalt/content/icu/icudt56l/curr/en_ZA.res +++ b/src/cobalt/content/icu/icudt56l/curr/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es.res b/src/cobalt/content/icu/icudt56l/curr/es.res index c0c5157..95b9e65 100644 --- a/src/cobalt/content/icu/icudt56l/curr/es.res +++ b/src/cobalt/content/icu/icudt56l/curr/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_419.res b/src/cobalt/content/icu/icudt56l/curr/es_419.res index 253e199..07aa4f5 100644 --- a/src/cobalt/content/icu/icudt56l/curr/es_419.res +++ b/src/cobalt/content/icu/icudt56l/curr/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_AR.res b/src/cobalt/content/icu/icudt56l/curr/es_AR.res index 00b8496..1be6445 100644 --- a/src/cobalt/content/icu/icudt56l/curr/es_AR.res +++ b/src/cobalt/content/icu/icudt56l/curr/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_MX.res b/src/cobalt/content/icu/icudt56l/curr/es_MX.res index ef02555..d24b22b 100644 --- a/src/cobalt/content/icu/icudt56l/curr/es_MX.res +++ b/src/cobalt/content/icu/icudt56l/curr/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/es_US.res b/src/cobalt/content/icu/icudt56l/curr/es_US.res index ab00ff3..b259afe 100644 --- a/src/cobalt/content/icu/icudt56l/curr/es_US.res +++ b/src/cobalt/content/icu/icudt56l/curr/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fa.res b/src/cobalt/content/icu/icudt56l/curr/fa.res index 591bc05..116109a 100644 --- a/src/cobalt/content/icu/icudt56l/curr/fa.res +++ b/src/cobalt/content/icu/icudt56l/curr/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fi.res b/src/cobalt/content/icu/icudt56l/curr/fi.res index 3b60b68..084bbe8 100644 --- a/src/cobalt/content/icu/icudt56l/curr/fi.res +++ b/src/cobalt/content/icu/icudt56l/curr/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fil.res b/src/cobalt/content/icu/icudt56l/curr/fil.res index 230aeb6..aebff6b 100644 --- a/src/cobalt/content/icu/icudt56l/curr/fil.res +++ b/src/cobalt/content/icu/icudt56l/curr/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fr.res b/src/cobalt/content/icu/icudt56l/curr/fr.res index 1f97b3e..44ee62f 100644 --- a/src/cobalt/content/icu/icudt56l/curr/fr.res +++ b/src/cobalt/content/icu/icudt56l/curr/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/fr_CA.res b/src/cobalt/content/icu/icudt56l/curr/fr_CA.res index 4799514..fb00495 100644 --- a/src/cobalt/content/icu/icudt56l/curr/fr_CA.res +++ b/src/cobalt/content/icu/icudt56l/curr/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/he.res b/src/cobalt/content/icu/icudt56l/curr/he.res index 64fdace..724a6ab 100644 --- a/src/cobalt/content/icu/icudt56l/curr/he.res +++ b/src/cobalt/content/icu/icudt56l/curr/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/hi.res b/src/cobalt/content/icu/icudt56l/curr/hi.res index 7534109..c526cee 100644 --- a/src/cobalt/content/icu/icudt56l/curr/hi.res +++ b/src/cobalt/content/icu/icudt56l/curr/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/hr.res b/src/cobalt/content/icu/icudt56l/curr/hr.res index acc0983..2e47654 100644 --- a/src/cobalt/content/icu/icudt56l/curr/hr.res +++ b/src/cobalt/content/icu/icudt56l/curr/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/hu.res b/src/cobalt/content/icu/icudt56l/curr/hu.res index 1d83f9b..690eb17 100644 --- a/src/cobalt/content/icu/icudt56l/curr/hu.res +++ b/src/cobalt/content/icu/icudt56l/curr/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/id.res b/src/cobalt/content/icu/icudt56l/curr/id.res index f5046d5..9c68843 100644 --- a/src/cobalt/content/icu/icudt56l/curr/id.res +++ b/src/cobalt/content/icu/icudt56l/curr/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/in.res b/src/cobalt/content/icu/icudt56l/curr/in.res index 0606cd4..dfcbe33 100644 --- a/src/cobalt/content/icu/icudt56l/curr/in.res +++ b/src/cobalt/content/icu/icudt56l/curr/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/it.res b/src/cobalt/content/icu/icudt56l/curr/it.res index d3fd8df..5c9a53c 100644 --- a/src/cobalt/content/icu/icudt56l/curr/it.res +++ b/src/cobalt/content/icu/icudt56l/curr/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/iw.res b/src/cobalt/content/icu/icudt56l/curr/iw.res index 67f7066..dff9e6c 100644 --- a/src/cobalt/content/icu/icudt56l/curr/iw.res +++ b/src/cobalt/content/icu/icudt56l/curr/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ja.res b/src/cobalt/content/icu/icudt56l/curr/ja.res index 2b6fc92..4bd7641 100644 --- a/src/cobalt/content/icu/icudt56l/curr/ja.res +++ b/src/cobalt/content/icu/icudt56l/curr/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ko.res b/src/cobalt/content/icu/icudt56l/curr/ko.res index 8866594..06b3fa6 100644 --- a/src/cobalt/content/icu/icudt56l/curr/ko.res +++ b/src/cobalt/content/icu/icudt56l/curr/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/lt.res b/src/cobalt/content/icu/icudt56l/curr/lt.res index 32a614c..056b778 100644 --- a/src/cobalt/content/icu/icudt56l/curr/lt.res +++ b/src/cobalt/content/icu/icudt56l/curr/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/lv.res b/src/cobalt/content/icu/icudt56l/curr/lv.res index f1619e1..c6f2d7f 100644 --- a/src/cobalt/content/icu/icudt56l/curr/lv.res +++ b/src/cobalt/content/icu/icudt56l/curr/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/nb.res b/src/cobalt/content/icu/icudt56l/curr/nb.res index af3df3b..cbd603d 100644 --- a/src/cobalt/content/icu/icudt56l/curr/nb.res +++ b/src/cobalt/content/icu/icudt56l/curr/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/nl.res b/src/cobalt/content/icu/icudt56l/curr/nl.res index 26191f0..f53d29e 100644 --- a/src/cobalt/content/icu/icudt56l/curr/nl.res +++ b/src/cobalt/content/icu/icudt56l/curr/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/no.res b/src/cobalt/content/icu/icudt56l/curr/no.res index f74cd4c..7c0017a 100644 --- a/src/cobalt/content/icu/icudt56l/curr/no.res +++ b/src/cobalt/content/icu/icudt56l/curr/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pl.res b/src/cobalt/content/icu/icudt56l/curr/pl.res index d4d6422..c8db80d 100644 --- a/src/cobalt/content/icu/icudt56l/curr/pl.res +++ b/src/cobalt/content/icu/icudt56l/curr/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pool.res b/src/cobalt/content/icu/icudt56l/curr/pool.res index 7dd8d59..8c07f44 100644 --- a/src/cobalt/content/icu/icudt56l/curr/pool.res +++ b/src/cobalt/content/icu/icudt56l/curr/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pt.res b/src/cobalt/content/icu/icudt56l/curr/pt.res index a029c17..6920e2b 100644 --- a/src/cobalt/content/icu/icudt56l/curr/pt.res +++ b/src/cobalt/content/icu/icudt56l/curr/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/pt_PT.res b/src/cobalt/content/icu/icudt56l/curr/pt_PT.res index f467c2e..43913fd 100644 --- a/src/cobalt/content/icu/icudt56l/curr/pt_PT.res +++ b/src/cobalt/content/icu/icudt56l/curr/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ro.res b/src/cobalt/content/icu/icudt56l/curr/ro.res index c005b60..1020d3d 100644 --- a/src/cobalt/content/icu/icudt56l/curr/ro.res +++ b/src/cobalt/content/icu/icudt56l/curr/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/root.res b/src/cobalt/content/icu/icudt56l/curr/root.res index 5a84b17..e5be485 100644 --- a/src/cobalt/content/icu/icudt56l/curr/root.res +++ b/src/cobalt/content/icu/icudt56l/curr/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/ru.res b/src/cobalt/content/icu/icudt56l/curr/ru.res index 9e799d5..6abb401 100644 --- a/src/cobalt/content/icu/icudt56l/curr/ru.res +++ b/src/cobalt/content/icu/icudt56l/curr/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sk.res b/src/cobalt/content/icu/icudt56l/curr/sk.res index b0714a2..a742fcd 100644 --- a/src/cobalt/content/icu/icudt56l/curr/sk.res +++ b/src/cobalt/content/icu/icudt56l/curr/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sl.res b/src/cobalt/content/icu/icudt56l/curr/sl.res index 5e78acd..5a2f0e6 100644 --- a/src/cobalt/content/icu/icudt56l/curr/sl.res +++ b/src/cobalt/content/icu/icudt56l/curr/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sr.res b/src/cobalt/content/icu/icudt56l/curr/sr.res index 59c3cf6..1e9de53 100644 --- a/src/cobalt/content/icu/icudt56l/curr/sr.res +++ b/src/cobalt/content/icu/icudt56l/curr/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/supplementalData.res b/src/cobalt/content/icu/icudt56l/curr/supplementalData.res index c63d565..cd49222 100644 --- a/src/cobalt/content/icu/icudt56l/curr/supplementalData.res +++ b/src/cobalt/content/icu/icudt56l/curr/supplementalData.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sv.res b/src/cobalt/content/icu/icudt56l/curr/sv.res index 93792b1..f12ee83 100644 --- a/src/cobalt/content/icu/icudt56l/curr/sv.res +++ b/src/cobalt/content/icu/icudt56l/curr/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/sw.res b/src/cobalt/content/icu/icudt56l/curr/sw.res index af1859f..6f34fc4 100644 --- a/src/cobalt/content/icu/icudt56l/curr/sw.res +++ b/src/cobalt/content/icu/icudt56l/curr/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/th.res b/src/cobalt/content/icu/icudt56l/curr/th.res index 527ed97..7044e5f 100644 --- a/src/cobalt/content/icu/icudt56l/curr/th.res +++ b/src/cobalt/content/icu/icudt56l/curr/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/tl.res b/src/cobalt/content/icu/icudt56l/curr/tl.res index 557adc4..652cad3 100644 --- a/src/cobalt/content/icu/icudt56l/curr/tl.res +++ b/src/cobalt/content/icu/icudt56l/curr/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/tr.res b/src/cobalt/content/icu/icudt56l/curr/tr.res index d89a965..ee3bc4d 100644 --- a/src/cobalt/content/icu/icudt56l/curr/tr.res +++ b/src/cobalt/content/icu/icudt56l/curr/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/uk.res b/src/cobalt/content/icu/icudt56l/curr/uk.res index e36e052..f733288 100644 --- a/src/cobalt/content/icu/icudt56l/curr/uk.res +++ b/src/cobalt/content/icu/icudt56l/curr/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/vi.res b/src/cobalt/content/icu/icudt56l/curr/vi.res index 067b5da..6d7281f 100644 --- a/src/cobalt/content/icu/icudt56l/curr/vi.res +++ b/src/cobalt/content/icu/icudt56l/curr/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh.res b/src/cobalt/content/icu/icudt56l/curr/zh.res index bc544da..248cb79 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_CN.res b/src/cobalt/content/icu/icudt56l/curr/zh_CN.res index f94bafe..d44eba3 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_CN.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_HK.res b/src/cobalt/content/icu/icudt56l/curr/zh_HK.res index a72da46..84900e7 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_HK.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res index 3452716..9c3ad5f 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res index c704cfa..39648f2 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res index d46a443..3a8c484 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res index 99b5b2b..ceb21a0 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res index 95843d1..abfef87 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res index c704cfa..39648f2 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_SG.res b/src/cobalt/content/icu/icudt56l/curr/zh_SG.res index ffb8395..6ddf438 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_SG.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/curr/zh_TW.res b/src/cobalt/content/icu/icudt56l/curr/zh_TW.res index 41f37d1..0d3071f 100644 --- a/src/cobalt/content/icu/icudt56l/curr/zh_TW.res +++ b/src/cobalt/content/icu/icudt56l/curr/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/cy.res b/src/cobalt/content/icu/icudt56l/cy.res index f9a9812..31bfcb9 100644 --- a/src/cobalt/content/icu/icudt56l/cy.res +++ b/src/cobalt/content/icu/icudt56l/cy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/da.res b/src/cobalt/content/icu/icudt56l/da.res index 6a7c227..c960bd0 100644 --- a/src/cobalt/content/icu/icudt56l/da.res +++ b/src/cobalt/content/icu/icudt56l/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/de.res b/src/cobalt/content/icu/icudt56l/de.res index 7512b61..bc5b990 100644 --- a/src/cobalt/content/icu/icudt56l/de.res +++ b/src/cobalt/content/icu/icudt56l/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/de_AT.res b/src/cobalt/content/icu/icudt56l/de_AT.res index c5c25df..9ad59a5 100644 --- a/src/cobalt/content/icu/icudt56l/de_AT.res +++ b/src/cobalt/content/icu/icudt56l/de_AT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/de_CH.res b/src/cobalt/content/icu/icudt56l/de_CH.res index e29448a..d867489 100644 --- a/src/cobalt/content/icu/icudt56l/de_CH.res +++ b/src/cobalt/content/icu/icudt56l/de_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ee.res b/src/cobalt/content/icu/icudt56l/ee.res index 1ff9820..0841690 100644 --- a/src/cobalt/content/icu/icudt56l/ee.res +++ b/src/cobalt/content/icu/icudt56l/ee.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/el.res b/src/cobalt/content/icu/icudt56l/el.res index 24b221d..5c8708e 100644 --- a/src/cobalt/content/icu/icudt56l/el.res +++ b/src/cobalt/content/icu/icudt56l/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en.res b/src/cobalt/content/icu/icudt56l/en.res index 4d29085..f4e06bc 100644 --- a/src/cobalt/content/icu/icudt56l/en.res +++ b/src/cobalt/content/icu/icudt56l/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_001.res b/src/cobalt/content/icu/icudt56l/en_001.res index abc68ca..c9f3b89 100644 --- a/src/cobalt/content/icu/icudt56l/en_001.res +++ b/src/cobalt/content/icu/icudt56l/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_150.res b/src/cobalt/content/icu/icudt56l/en_150.res index 4dc79df..c454e67 100644 --- a/src/cobalt/content/icu/icudt56l/en_150.res +++ b/src/cobalt/content/icu/icudt56l/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_AU.res b/src/cobalt/content/icu/icudt56l/en_AU.res index 83a901e..99b8d95 100644 --- a/src/cobalt/content/icu/icudt56l/en_AU.res +++ b/src/cobalt/content/icu/icudt56l/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_CA.res b/src/cobalt/content/icu/icudt56l/en_CA.res index bc52baa..ec846ff 100644 --- a/src/cobalt/content/icu/icudt56l/en_CA.res +++ b/src/cobalt/content/icu/icudt56l/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_GB.res b/src/cobalt/content/icu/icudt56l/en_GB.res index 4bbb5cc..0afa7b6 100644 --- a/src/cobalt/content/icu/icudt56l/en_GB.res +++ b/src/cobalt/content/icu/icudt56l/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_IN.res b/src/cobalt/content/icu/icudt56l/en_IN.res index 05e2ca0..230aff9 100644 --- a/src/cobalt/content/icu/icudt56l/en_IN.res +++ b/src/cobalt/content/icu/icudt56l/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_NZ.res b/src/cobalt/content/icu/icudt56l/en_NZ.res index cece412..b66ed27 100644 --- a/src/cobalt/content/icu/icudt56l/en_NZ.res +++ b/src/cobalt/content/icu/icudt56l/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_US.res b/src/cobalt/content/icu/icudt56l/en_US.res index 008e4b7..d0ddba1 100644 --- a/src/cobalt/content/icu/icudt56l/en_US.res +++ b/src/cobalt/content/icu/icudt56l/en_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/en_ZA.res b/src/cobalt/content/icu/icudt56l/en_ZA.res index 885ee5c..3e75979 100644 --- a/src/cobalt/content/icu/icudt56l/en_ZA.res +++ b/src/cobalt/content/icu/icudt56l/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/eo.res b/src/cobalt/content/icu/icudt56l/eo.res index 396eb3a..3ef0851 100644 --- a/src/cobalt/content/icu/icudt56l/eo.res +++ b/src/cobalt/content/icu/icudt56l/eo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es.res b/src/cobalt/content/icu/icudt56l/es.res index 76bbc8d..3fd059f 100644 --- a/src/cobalt/content/icu/icudt56l/es.res +++ b/src/cobalt/content/icu/icudt56l/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_419.res b/src/cobalt/content/icu/icudt56l/es_419.res index b880024..4cd3949 100644 --- a/src/cobalt/content/icu/icudt56l/es_419.res +++ b/src/cobalt/content/icu/icudt56l/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_AR.res b/src/cobalt/content/icu/icudt56l/es_AR.res index 7ec0cc5..8a7e563 100644 --- a/src/cobalt/content/icu/icudt56l/es_AR.res +++ b/src/cobalt/content/icu/icudt56l/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_ES.res b/src/cobalt/content/icu/icudt56l/es_ES.res index 008e4b7..d0ddba1 100644 --- a/src/cobalt/content/icu/icudt56l/es_ES.res +++ b/src/cobalt/content/icu/icudt56l/es_ES.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_MX.res b/src/cobalt/content/icu/icudt56l/es_MX.res index c15d05f..326f91c 100644 --- a/src/cobalt/content/icu/icudt56l/es_MX.res +++ b/src/cobalt/content/icu/icudt56l/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/es_US.res b/src/cobalt/content/icu/icudt56l/es_US.res index c21fa87..196c802 100644 --- a/src/cobalt/content/icu/icudt56l/es_US.res +++ b/src/cobalt/content/icu/icudt56l/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/et.res b/src/cobalt/content/icu/icudt56l/et.res index 1d58d37..0587d8a 100644 --- a/src/cobalt/content/icu/icudt56l/et.res +++ b/src/cobalt/content/icu/icudt56l/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/eu.res b/src/cobalt/content/icu/icudt56l/eu.res index 4aacb51..a8bbdb0 100644 --- a/src/cobalt/content/icu/icudt56l/eu.res +++ b/src/cobalt/content/icu/icudt56l/eu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fa.res b/src/cobalt/content/icu/icudt56l/fa.res index ce1ed39..987ef94 100644 --- a/src/cobalt/content/icu/icudt56l/fa.res +++ b/src/cobalt/content/icu/icudt56l/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fi.res b/src/cobalt/content/icu/icudt56l/fi.res index 0de1572..b46d9ef 100644 --- a/src/cobalt/content/icu/icudt56l/fi.res +++ b/src/cobalt/content/icu/icudt56l/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fil.res b/src/cobalt/content/icu/icudt56l/fil.res index 497fddc..831e5c4 100644 --- a/src/cobalt/content/icu/icudt56l/fil.res +++ b/src/cobalt/content/icu/icudt56l/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fo.res b/src/cobalt/content/icu/icudt56l/fo.res index ed636b7..f9055888 100644 --- a/src/cobalt/content/icu/icudt56l/fo.res +++ b/src/cobalt/content/icu/icudt56l/fo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fr.res b/src/cobalt/content/icu/icudt56l/fr.res index fa0a350..b24d618 100644 --- a/src/cobalt/content/icu/icudt56l/fr.res +++ b/src/cobalt/content/icu/icudt56l/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fr_CA.res b/src/cobalt/content/icu/icudt56l/fr_CA.res index 4d95890..6bfbab5 100644 --- a/src/cobalt/content/icu/icudt56l/fr_CA.res +++ b/src/cobalt/content/icu/icudt56l/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/fr_CH.res b/src/cobalt/content/icu/icudt56l/fr_CH.res index 660f7cc..ca578e2 100644 --- a/src/cobalt/content/icu/icudt56l/fr_CH.res +++ b/src/cobalt/content/icu/icudt56l/fr_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ga.res b/src/cobalt/content/icu/icudt56l/ga.res index 557d401..7ab9307 100644 --- a/src/cobalt/content/icu/icudt56l/ga.res +++ b/src/cobalt/content/icu/icudt56l/ga.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/gl.res b/src/cobalt/content/icu/icudt56l/gl.res index 382bdcd..1576f90 100644 --- a/src/cobalt/content/icu/icudt56l/gl.res +++ b/src/cobalt/content/icu/icudt56l/gl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/gu.res b/src/cobalt/content/icu/icudt56l/gu.res index 4f4387c..1c5e5a6 100644 --- a/src/cobalt/content/icu/icudt56l/gu.res +++ b/src/cobalt/content/icu/icudt56l/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ha.res b/src/cobalt/content/icu/icudt56l/ha.res index 56fa9c8..a41f4f9 100644 --- a/src/cobalt/content/icu/icudt56l/ha.res +++ b/src/cobalt/content/icu/icudt56l/ha.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/haw.res b/src/cobalt/content/icu/icudt56l/haw.res index e22d856..46c4980 100644 --- a/src/cobalt/content/icu/icudt56l/haw.res +++ b/src/cobalt/content/icu/icudt56l/haw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/he.res b/src/cobalt/content/icu/icudt56l/he.res index 1437887..874b972 100644 --- a/src/cobalt/content/icu/icudt56l/he.res +++ b/src/cobalt/content/icu/icudt56l/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hi.res b/src/cobalt/content/icu/icudt56l/hi.res index 6807120..17db902 100644 --- a/src/cobalt/content/icu/icudt56l/hi.res +++ b/src/cobalt/content/icu/icudt56l/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hr.res b/src/cobalt/content/icu/icudt56l/hr.res index 510a817..201c027 100644 --- a/src/cobalt/content/icu/icudt56l/hr.res +++ b/src/cobalt/content/icu/icudt56l/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hu.res b/src/cobalt/content/icu/icudt56l/hu.res index 1cad64f..e7b7c6b 100644 --- a/src/cobalt/content/icu/icudt56l/hu.res +++ b/src/cobalt/content/icu/icudt56l/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/hy.res b/src/cobalt/content/icu/icudt56l/hy.res index 788c808..31f2a03 100644 --- a/src/cobalt/content/icu/icudt56l/hy.res +++ b/src/cobalt/content/icu/icudt56l/hy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/id.res b/src/cobalt/content/icu/icudt56l/id.res index 113e603..42d1501 100644 --- a/src/cobalt/content/icu/icudt56l/id.res +++ b/src/cobalt/content/icu/icudt56l/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ig.res b/src/cobalt/content/icu/icudt56l/ig.res index c16c2cb..4fe2b94 100644 --- a/src/cobalt/content/icu/icudt56l/ig.res +++ b/src/cobalt/content/icu/icudt56l/ig.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/in.res b/src/cobalt/content/icu/icudt56l/in.res index 37f737c..5717187 100644 --- a/src/cobalt/content/icu/icudt56l/in.res +++ b/src/cobalt/content/icu/icudt56l/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/is.res b/src/cobalt/content/icu/icudt56l/is.res index dc12018..7b55953 100644 --- a/src/cobalt/content/icu/icudt56l/is.res +++ b/src/cobalt/content/icu/icudt56l/is.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/it.res b/src/cobalt/content/icu/icudt56l/it.res index 017858b..d162675 100644 --- a/src/cobalt/content/icu/icudt56l/it.res +++ b/src/cobalt/content/icu/icudt56l/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/it_CH.res b/src/cobalt/content/icu/icudt56l/it_CH.res index 9a534b2..652ab6e 100644 --- a/src/cobalt/content/icu/icudt56l/it_CH.res +++ b/src/cobalt/content/icu/icudt56l/it_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/iw.res b/src/cobalt/content/icu/icudt56l/iw.res index 0335003..dde8495 100644 --- a/src/cobalt/content/icu/icudt56l/iw.res +++ b/src/cobalt/content/icu/icudt56l/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ja.res b/src/cobalt/content/icu/icudt56l/ja.res index 1a946b0..21807a9 100644 --- a/src/cobalt/content/icu/icudt56l/ja.res +++ b/src/cobalt/content/icu/icudt56l/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ka.res b/src/cobalt/content/icu/icudt56l/ka.res index 0ba4979..adcb7d3 100644 --- a/src/cobalt/content/icu/icudt56l/ka.res +++ b/src/cobalt/content/icu/icudt56l/ka.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/kk.res b/src/cobalt/content/icu/icudt56l/kk.res index 4c0e93d..96c9f9b 100644 --- a/src/cobalt/content/icu/icudt56l/kk.res +++ b/src/cobalt/content/icu/icudt56l/kk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/km.res b/src/cobalt/content/icu/icudt56l/km.res index 12beb53..2f736a4 100644 --- a/src/cobalt/content/icu/icudt56l/km.res +++ b/src/cobalt/content/icu/icudt56l/km.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/kn.res b/src/cobalt/content/icu/icudt56l/kn.res index 8aaa260..2902bd7 100644 --- a/src/cobalt/content/icu/icudt56l/kn.res +++ b/src/cobalt/content/icu/icudt56l/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ko.res b/src/cobalt/content/icu/icudt56l/ko.res index 19c8aa3..36fa41b 100644 --- a/src/cobalt/content/icu/icudt56l/ko.res +++ b/src/cobalt/content/icu/icudt56l/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ku.res b/src/cobalt/content/icu/icudt56l/ku.res index 81e0774..655b5a5 100644 --- a/src/cobalt/content/icu/icudt56l/ku.res +++ b/src/cobalt/content/icu/icudt56l/ku.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ky.res b/src/cobalt/content/icu/icudt56l/ky.res index 17bd776..1f4ab15 100644 --- a/src/cobalt/content/icu/icudt56l/ky.res +++ b/src/cobalt/content/icu/icudt56l/ky.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/af.res b/src/cobalt/content/icu/icudt56l/lang/af.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/af.res +++ b/src/cobalt/content/icu/icudt56l/lang/af.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ak.res b/src/cobalt/content/icu/icudt56l/lang/ak.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ak.res +++ b/src/cobalt/content/icu/icudt56l/lang/ak.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/am.res b/src/cobalt/content/icu/icudt56l/lang/am.res index 1b34433..3d35959 100644 --- a/src/cobalt/content/icu/icudt56l/lang/am.res +++ b/src/cobalt/content/icu/icudt56l/lang/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/an.res b/src/cobalt/content/icu/icudt56l/lang/an.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/an.res +++ b/src/cobalt/content/icu/icudt56l/lang/an.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ar.res b/src/cobalt/content/icu/icudt56l/lang/ar.res index bb13917..1ab5683 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ar.res +++ b/src/cobalt/content/icu/icudt56l/lang/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ast.res b/src/cobalt/content/icu/icudt56l/lang/ast.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ast.res +++ b/src/cobalt/content/icu/icudt56l/lang/ast.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/az.res b/src/cobalt/content/icu/icudt56l/lang/az.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/az.res +++ b/src/cobalt/content/icu/icudt56l/lang/az.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/be.res b/src/cobalt/content/icu/icudt56l/lang/be.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/be.res +++ b/src/cobalt/content/icu/icudt56l/lang/be.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bem.res b/src/cobalt/content/icu/icudt56l/lang/bem.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/bem.res +++ b/src/cobalt/content/icu/icudt56l/lang/bem.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bg.res b/src/cobalt/content/icu/icudt56l/lang/bg.res index c728981..1a5be32 100644 --- a/src/cobalt/content/icu/icudt56l/lang/bg.res +++ b/src/cobalt/content/icu/icudt56l/lang/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bn.res b/src/cobalt/content/icu/icudt56l/lang/bn.res index 5c67430..4988bb9 100644 --- a/src/cobalt/content/icu/icudt56l/lang/bn.res +++ b/src/cobalt/content/icu/icudt56l/lang/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/br.res b/src/cobalt/content/icu/icudt56l/lang/br.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/br.res +++ b/src/cobalt/content/icu/icudt56l/lang/br.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/bs.res b/src/cobalt/content/icu/icudt56l/lang/bs.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/bs.res +++ b/src/cobalt/content/icu/icudt56l/lang/bs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ca.res b/src/cobalt/content/icu/icudt56l/lang/ca.res index 09afb78..6fbca5d 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ca.res +++ b/src/cobalt/content/icu/icudt56l/lang/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ckb.res b/src/cobalt/content/icu/icudt56l/lang/ckb.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ckb.res +++ b/src/cobalt/content/icu/icudt56l/lang/ckb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/cs.res b/src/cobalt/content/icu/icudt56l/lang/cs.res index df5b7a0..28ecabe 100644 --- a/src/cobalt/content/icu/icudt56l/lang/cs.res +++ b/src/cobalt/content/icu/icudt56l/lang/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/cy.res b/src/cobalt/content/icu/icudt56l/lang/cy.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/cy.res +++ b/src/cobalt/content/icu/icudt56l/lang/cy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/da.res b/src/cobalt/content/icu/icudt56l/lang/da.res index 93d9594..99a4dcd 100644 --- a/src/cobalt/content/icu/icudt56l/lang/da.res +++ b/src/cobalt/content/icu/icudt56l/lang/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/de.res b/src/cobalt/content/icu/icudt56l/lang/de.res index f698129..c1c8d5f 100644 --- a/src/cobalt/content/icu/icudt56l/lang/de.res +++ b/src/cobalt/content/icu/icudt56l/lang/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ee.res b/src/cobalt/content/icu/icudt56l/lang/ee.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ee.res +++ b/src/cobalt/content/icu/icudt56l/lang/ee.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/el.res b/src/cobalt/content/icu/icudt56l/lang/el.res index feeb860..049baa1 100644 --- a/src/cobalt/content/icu/icudt56l/lang/el.res +++ b/src/cobalt/content/icu/icudt56l/lang/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/en.res b/src/cobalt/content/icu/icudt56l/lang/en.res index 63397b9..f90c97f 100644 --- a/src/cobalt/content/icu/icudt56l/lang/en.res +++ b/src/cobalt/content/icu/icudt56l/lang/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/en_GB.res b/src/cobalt/content/icu/icudt56l/lang/en_GB.res index e85d11d..01ae348 100644 --- a/src/cobalt/content/icu/icudt56l/lang/en_GB.res +++ b/src/cobalt/content/icu/icudt56l/lang/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/eo.res b/src/cobalt/content/icu/icudt56l/lang/eo.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/eo.res +++ b/src/cobalt/content/icu/icudt56l/lang/eo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/es.res b/src/cobalt/content/icu/icudt56l/lang/es.res index f87be3d..e7db31e 100644 --- a/src/cobalt/content/icu/icudt56l/lang/es.res +++ b/src/cobalt/content/icu/icudt56l/lang/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/es_419.res b/src/cobalt/content/icu/icudt56l/lang/es_419.res index 2e8777e..837f6a0 100644 --- a/src/cobalt/content/icu/icudt56l/lang/es_419.res +++ b/src/cobalt/content/icu/icudt56l/lang/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/et.res b/src/cobalt/content/icu/icudt56l/lang/et.res index 494de43..327d8b5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/et.res +++ b/src/cobalt/content/icu/icudt56l/lang/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/eu.res b/src/cobalt/content/icu/icudt56l/lang/eu.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/eu.res +++ b/src/cobalt/content/icu/icudt56l/lang/eu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fa.res b/src/cobalt/content/icu/icudt56l/lang/fa.res index 56784ac..dc3a53a 100644 --- a/src/cobalt/content/icu/icudt56l/lang/fa.res +++ b/src/cobalt/content/icu/icudt56l/lang/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fi.res b/src/cobalt/content/icu/icudt56l/lang/fi.res index d57330d..1360e3d 100644 --- a/src/cobalt/content/icu/icudt56l/lang/fi.res +++ b/src/cobalt/content/icu/icudt56l/lang/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fil.res b/src/cobalt/content/icu/icudt56l/lang/fil.res index 307050b..7100f70 100644 --- a/src/cobalt/content/icu/icudt56l/lang/fil.res +++ b/src/cobalt/content/icu/icudt56l/lang/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fo.res b/src/cobalt/content/icu/icudt56l/lang/fo.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/fo.res +++ b/src/cobalt/content/icu/icudt56l/lang/fo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/fr.res b/src/cobalt/content/icu/icudt56l/lang/fr.res index 9c998d0..57b9b8c 100644 --- a/src/cobalt/content/icu/icudt56l/lang/fr.res +++ b/src/cobalt/content/icu/icudt56l/lang/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ga.res b/src/cobalt/content/icu/icudt56l/lang/ga.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ga.res +++ b/src/cobalt/content/icu/icudt56l/lang/ga.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/gl.res b/src/cobalt/content/icu/icudt56l/lang/gl.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/gl.res +++ b/src/cobalt/content/icu/icudt56l/lang/gl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/gu.res b/src/cobalt/content/icu/icudt56l/lang/gu.res index deb1e55..38b7e18 100644 --- a/src/cobalt/content/icu/icudt56l/lang/gu.res +++ b/src/cobalt/content/icu/icudt56l/lang/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ha.res b/src/cobalt/content/icu/icudt56l/lang/ha.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ha.res +++ b/src/cobalt/content/icu/icudt56l/lang/ha.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/haw.res b/src/cobalt/content/icu/icudt56l/lang/haw.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/haw.res +++ b/src/cobalt/content/icu/icudt56l/lang/haw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/he.res b/src/cobalt/content/icu/icudt56l/lang/he.res index 6c31aa3..b11652b 100644 --- a/src/cobalt/content/icu/icudt56l/lang/he.res +++ b/src/cobalt/content/icu/icudt56l/lang/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hi.res b/src/cobalt/content/icu/icudt56l/lang/hi.res index 51a73d7..3e30df6 100644 --- a/src/cobalt/content/icu/icudt56l/lang/hi.res +++ b/src/cobalt/content/icu/icudt56l/lang/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hr.res b/src/cobalt/content/icu/icudt56l/lang/hr.res index 92cd698..6cae61d 100644 --- a/src/cobalt/content/icu/icudt56l/lang/hr.res +++ b/src/cobalt/content/icu/icudt56l/lang/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hu.res b/src/cobalt/content/icu/icudt56l/lang/hu.res index 2d8d2f0..9cf7fd8 100644 --- a/src/cobalt/content/icu/icudt56l/lang/hu.res +++ b/src/cobalt/content/icu/icudt56l/lang/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/hy.res b/src/cobalt/content/icu/icudt56l/lang/hy.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/hy.res +++ b/src/cobalt/content/icu/icudt56l/lang/hy.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/id.res b/src/cobalt/content/icu/icudt56l/lang/id.res index 6c93af1..1b3af59 100644 --- a/src/cobalt/content/icu/icudt56l/lang/id.res +++ b/src/cobalt/content/icu/icudt56l/lang/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ig.res b/src/cobalt/content/icu/icudt56l/lang/ig.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ig.res +++ b/src/cobalt/content/icu/icudt56l/lang/ig.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/in.res b/src/cobalt/content/icu/icudt56l/lang/in.res index 919f78c..9a6ec30 100644 --- a/src/cobalt/content/icu/icudt56l/lang/in.res +++ b/src/cobalt/content/icu/icudt56l/lang/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/is.res b/src/cobalt/content/icu/icudt56l/lang/is.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/is.res +++ b/src/cobalt/content/icu/icudt56l/lang/is.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/it.res b/src/cobalt/content/icu/icudt56l/lang/it.res index 83be75d..55cc520 100644 --- a/src/cobalt/content/icu/icudt56l/lang/it.res +++ b/src/cobalt/content/icu/icudt56l/lang/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/iw.res b/src/cobalt/content/icu/icudt56l/lang/iw.res index 5f83c12..2c0cbe7 100644 --- a/src/cobalt/content/icu/icudt56l/lang/iw.res +++ b/src/cobalt/content/icu/icudt56l/lang/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ja.res b/src/cobalt/content/icu/icudt56l/lang/ja.res index c60a5b8..0aa7d29 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ja.res +++ b/src/cobalt/content/icu/icudt56l/lang/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ka.res b/src/cobalt/content/icu/icudt56l/lang/ka.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ka.res +++ b/src/cobalt/content/icu/icudt56l/lang/ka.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/kk.res b/src/cobalt/content/icu/icudt56l/lang/kk.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/kk.res +++ b/src/cobalt/content/icu/icudt56l/lang/kk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/km.res b/src/cobalt/content/icu/icudt56l/lang/km.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/km.res +++ b/src/cobalt/content/icu/icudt56l/lang/km.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/kn.res b/src/cobalt/content/icu/icudt56l/lang/kn.res index 96df004..209967c 100644 --- a/src/cobalt/content/icu/icudt56l/lang/kn.res +++ b/src/cobalt/content/icu/icudt56l/lang/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ko.res b/src/cobalt/content/icu/icudt56l/lang/ko.res index 3dd51a4..b1841e6 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ko.res +++ b/src/cobalt/content/icu/icudt56l/lang/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ku.res b/src/cobalt/content/icu/icudt56l/lang/ku.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ku.res +++ b/src/cobalt/content/icu/icudt56l/lang/ku.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ky.res b/src/cobalt/content/icu/icudt56l/lang/ky.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ky.res +++ b/src/cobalt/content/icu/icudt56l/lang/ky.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lg.res b/src/cobalt/content/icu/icudt56l/lang/lg.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/lg.res +++ b/src/cobalt/content/icu/icudt56l/lang/lg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ln.res b/src/cobalt/content/icu/icudt56l/lang/ln.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ln.res +++ b/src/cobalt/content/icu/icudt56l/lang/ln.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lo.res b/src/cobalt/content/icu/icudt56l/lang/lo.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/lo.res +++ b/src/cobalt/content/icu/icudt56l/lang/lo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lt.res b/src/cobalt/content/icu/icudt56l/lang/lt.res index a717030..aa6b48a 100644 --- a/src/cobalt/content/icu/icudt56l/lang/lt.res +++ b/src/cobalt/content/icu/icudt56l/lang/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/lv.res b/src/cobalt/content/icu/icudt56l/lang/lv.res index e2947f6..408d5f2 100644 --- a/src/cobalt/content/icu/icudt56l/lang/lv.res +++ b/src/cobalt/content/icu/icudt56l/lang/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mfe.res b/src/cobalt/content/icu/icudt56l/lang/mfe.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/mfe.res +++ b/src/cobalt/content/icu/icudt56l/lang/mfe.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mg.res b/src/cobalt/content/icu/icudt56l/lang/mg.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/mg.res +++ b/src/cobalt/content/icu/icudt56l/lang/mg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mk.res b/src/cobalt/content/icu/icudt56l/lang/mk.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/mk.res +++ b/src/cobalt/content/icu/icudt56l/lang/mk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ml.res b/src/cobalt/content/icu/icudt56l/lang/ml.res index 09b2da6..5e71641 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ml.res +++ b/src/cobalt/content/icu/icudt56l/lang/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mn.res b/src/cobalt/content/icu/icudt56l/lang/mn.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/mn.res +++ b/src/cobalt/content/icu/icudt56l/lang/mn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mo.res b/src/cobalt/content/icu/icudt56l/lang/mo.res index 74d43b4..d16ea71 100644 --- a/src/cobalt/content/icu/icudt56l/lang/mo.res +++ b/src/cobalt/content/icu/icudt56l/lang/mo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mr.res b/src/cobalt/content/icu/icudt56l/lang/mr.res index 2ad6158..553e75f 100644 --- a/src/cobalt/content/icu/icudt56l/lang/mr.res +++ b/src/cobalt/content/icu/icudt56l/lang/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ms.res b/src/cobalt/content/icu/icudt56l/lang/ms.res index 3b5c982..50e9141 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ms.res +++ b/src/cobalt/content/icu/icudt56l/lang/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/mt.res b/src/cobalt/content/icu/icudt56l/lang/mt.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/mt.res +++ b/src/cobalt/content/icu/icudt56l/lang/mt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/my.res b/src/cobalt/content/icu/icudt56l/lang/my.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/my.res +++ b/src/cobalt/content/icu/icudt56l/lang/my.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nb.res b/src/cobalt/content/icu/icudt56l/lang/nb.res index e24ee82..adc7586 100644 --- a/src/cobalt/content/icu/icudt56l/lang/nb.res +++ b/src/cobalt/content/icu/icudt56l/lang/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ne.res b/src/cobalt/content/icu/icudt56l/lang/ne.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ne.res +++ b/src/cobalt/content/icu/icudt56l/lang/ne.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nl.res b/src/cobalt/content/icu/icudt56l/lang/nl.res index 72fef2d..6343007 100644 --- a/src/cobalt/content/icu/icudt56l/lang/nl.res +++ b/src/cobalt/content/icu/icudt56l/lang/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nn.res b/src/cobalt/content/icu/icudt56l/lang/nn.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/nn.res +++ b/src/cobalt/content/icu/icudt56l/lang/nn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/no.res b/src/cobalt/content/icu/icudt56l/lang/no.res index 35438a1..eec6664 100644 --- a/src/cobalt/content/icu/icudt56l/lang/no.res +++ b/src/cobalt/content/icu/icudt56l/lang/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/nyn.res b/src/cobalt/content/icu/icudt56l/lang/nyn.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/nyn.res +++ b/src/cobalt/content/icu/icudt56l/lang/nyn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/om.res b/src/cobalt/content/icu/icudt56l/lang/om.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/om.res +++ b/src/cobalt/content/icu/icudt56l/lang/om.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/or.res b/src/cobalt/content/icu/icudt56l/lang/or.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/or.res +++ b/src/cobalt/content/icu/icudt56l/lang/or.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pa.res b/src/cobalt/content/icu/icudt56l/lang/pa.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/pa.res +++ b/src/cobalt/content/icu/icudt56l/lang/pa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pl.res b/src/cobalt/content/icu/icudt56l/lang/pl.res index f686dc3..997b62f 100644 --- a/src/cobalt/content/icu/icudt56l/lang/pl.res +++ b/src/cobalt/content/icu/icudt56l/lang/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pool.res b/src/cobalt/content/icu/icudt56l/lang/pool.res index 097c8c2..dde2560 100644 --- a/src/cobalt/content/icu/icudt56l/lang/pool.res +++ b/src/cobalt/content/icu/icudt56l/lang/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ps.res b/src/cobalt/content/icu/icudt56l/lang/ps.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ps.res +++ b/src/cobalt/content/icu/icudt56l/lang/ps.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pt.res b/src/cobalt/content/icu/icudt56l/lang/pt.res index 083238f..16f172a 100644 --- a/src/cobalt/content/icu/icudt56l/lang/pt.res +++ b/src/cobalt/content/icu/icudt56l/lang/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/pt_PT.res b/src/cobalt/content/icu/icudt56l/lang/pt_PT.res index d99c30e..5ed28c4 100644 --- a/src/cobalt/content/icu/icudt56l/lang/pt_PT.res +++ b/src/cobalt/content/icu/icudt56l/lang/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/rm.res b/src/cobalt/content/icu/icudt56l/lang/rm.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/rm.res +++ b/src/cobalt/content/icu/icudt56l/lang/rm.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/rn.res b/src/cobalt/content/icu/icudt56l/lang/rn.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/rn.res +++ b/src/cobalt/content/icu/icudt56l/lang/rn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ro.res b/src/cobalt/content/icu/icudt56l/lang/ro.res index 7d60a43..d8b5672 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ro.res +++ b/src/cobalt/content/icu/icudt56l/lang/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ro_MD.res b/src/cobalt/content/icu/icudt56l/lang/ro_MD.res index 9fb8d50..e911239 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ro_MD.res +++ b/src/cobalt/content/icu/icudt56l/lang/ro_MD.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/root.res b/src/cobalt/content/icu/icudt56l/lang/root.res index 1f511a2..65785f7 100644 --- a/src/cobalt/content/icu/icudt56l/lang/root.res +++ b/src/cobalt/content/icu/icudt56l/lang/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ru.res b/src/cobalt/content/icu/icudt56l/lang/ru.res index e533727..1638295 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ru.res +++ b/src/cobalt/content/icu/icudt56l/lang/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/rw.res b/src/cobalt/content/icu/icudt56l/lang/rw.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/rw.res +++ b/src/cobalt/content/icu/icudt56l/lang/rw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sh.res b/src/cobalt/content/icu/icudt56l/lang/sh.res index c500249..e3daa0d 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sh.res +++ b/src/cobalt/content/icu/icudt56l/lang/sh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/si.res b/src/cobalt/content/icu/icudt56l/lang/si.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/si.res +++ b/src/cobalt/content/icu/icudt56l/lang/si.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sk.res b/src/cobalt/content/icu/icudt56l/lang/sk.res index b211109..f1c888c 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sk.res +++ b/src/cobalt/content/icu/icudt56l/lang/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sl.res b/src/cobalt/content/icu/icudt56l/lang/sl.res index 0af3682..b06ac68 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sl.res +++ b/src/cobalt/content/icu/icudt56l/lang/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sn.res b/src/cobalt/content/icu/icudt56l/lang/sn.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sn.res +++ b/src/cobalt/content/icu/icudt56l/lang/sn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/so.res b/src/cobalt/content/icu/icudt56l/lang/so.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/so.res +++ b/src/cobalt/content/icu/icudt56l/lang/so.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sq.res b/src/cobalt/content/icu/icudt56l/lang/sq.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sq.res +++ b/src/cobalt/content/icu/icudt56l/lang/sq.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sr.res b/src/cobalt/content/icu/icudt56l/lang/sr.res index d3e4fc2..4243fe1 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sr.res +++ b/src/cobalt/content/icu/icudt56l/lang/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res b/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res index 4ed265a..9e0bea3 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56l/lang/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sv.res b/src/cobalt/content/icu/icudt56l/lang/sv.res index 7af73bb..b89e78f 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sv.res +++ b/src/cobalt/content/icu/icudt56l/lang/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/sw.res b/src/cobalt/content/icu/icudt56l/lang/sw.res index e084dd3..d339f7d 100644 --- a/src/cobalt/content/icu/icudt56l/lang/sw.res +++ b/src/cobalt/content/icu/icudt56l/lang/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ta.res b/src/cobalt/content/icu/icudt56l/lang/ta.res index 34e8d23..24614ec 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ta.res +++ b/src/cobalt/content/icu/icudt56l/lang/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/te.res b/src/cobalt/content/icu/icudt56l/lang/te.res index db1ac43..1d32c96 100644 --- a/src/cobalt/content/icu/icudt56l/lang/te.res +++ b/src/cobalt/content/icu/icudt56l/lang/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/tg.res b/src/cobalt/content/icu/icudt56l/lang/tg.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/tg.res +++ b/src/cobalt/content/icu/icudt56l/lang/tg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/th.res b/src/cobalt/content/icu/icudt56l/lang/th.res index e67284e..effbecc 100644 --- a/src/cobalt/content/icu/icudt56l/lang/th.res +++ b/src/cobalt/content/icu/icudt56l/lang/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ti.res b/src/cobalt/content/icu/icudt56l/lang/ti.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ti.res +++ b/src/cobalt/content/icu/icudt56l/lang/ti.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/tl.res b/src/cobalt/content/icu/icudt56l/lang/tl.res index ea58c63..cdcff68 100644 --- a/src/cobalt/content/icu/icudt56l/lang/tl.res +++ b/src/cobalt/content/icu/icudt56l/lang/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/to.res b/src/cobalt/content/icu/icudt56l/lang/to.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/to.res +++ b/src/cobalt/content/icu/icudt56l/lang/to.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/tr.res b/src/cobalt/content/icu/icudt56l/lang/tr.res index 0f21256..d077ac8 100644 --- a/src/cobalt/content/icu/icudt56l/lang/tr.res +++ b/src/cobalt/content/icu/icudt56l/lang/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/uk.res b/src/cobalt/content/icu/icudt56l/lang/uk.res index 35551bf..b099afd 100644 --- a/src/cobalt/content/icu/icudt56l/lang/uk.res +++ b/src/cobalt/content/icu/icudt56l/lang/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/ur.res b/src/cobalt/content/icu/icudt56l/lang/ur.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/ur.res +++ b/src/cobalt/content/icu/icudt56l/lang/ur.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/uz.res b/src/cobalt/content/icu/icudt56l/lang/uz.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/uz.res +++ b/src/cobalt/content/icu/icudt56l/lang/uz.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/vi.res b/src/cobalt/content/icu/icudt56l/lang/vi.res index 980e02c..98aa90d 100644 --- a/src/cobalt/content/icu/icudt56l/lang/vi.res +++ b/src/cobalt/content/icu/icudt56l/lang/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/wa.res b/src/cobalt/content/icu/icudt56l/lang/wa.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/wa.res +++ b/src/cobalt/content/icu/icudt56l/lang/wa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/yo.res b/src/cobalt/content/icu/icudt56l/lang/yo.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/yo.res +++ b/src/cobalt/content/icu/icudt56l/lang/yo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh.res b/src/cobalt/content/icu/icudt56l/lang/zh.res index f58391f..9dbab21 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_CN.res b/src/cobalt/content/icu/icudt56l/lang/zh_CN.res index a7ccb03..d65558b 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_CN.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_HK.res b/src/cobalt/content/icu/icudt56l/lang/zh_HK.res index 7991f52..bc307bb 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_HK.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res index 2b89ea3..15f949b 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res index 9fb8d50..e911239 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res index 9fb8d50..e911239 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res index 0865fa5..eb74632 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res index 11c1f97..0a152c4 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res index 9fb8d50..e911239 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_SG.res b/src/cobalt/content/icu/icudt56l/lang/zh_SG.res index 85200e4..e40ce2c 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_SG.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zh_TW.res b/src/cobalt/content/icu/icudt56l/lang/zh_TW.res index 430004b..6436069 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zh_TW.res +++ b/src/cobalt/content/icu/icudt56l/lang/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lang/zu.res b/src/cobalt/content/icu/icudt56l/lang/zu.res index 8f4230f..1f0a3e5 100644 --- a/src/cobalt/content/icu/icudt56l/lang/zu.res +++ b/src/cobalt/content/icu/icudt56l/lang/zu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lg.res b/src/cobalt/content/icu/icudt56l/lg.res index 57facdd..f70868d 100644 --- a/src/cobalt/content/icu/icudt56l/lg.res +++ b/src/cobalt/content/icu/icudt56l/lg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ln.res b/src/cobalt/content/icu/icudt56l/ln.res index 2778284..7f49c5e 100644 --- a/src/cobalt/content/icu/icudt56l/ln.res +++ b/src/cobalt/content/icu/icudt56l/ln.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lo.res b/src/cobalt/content/icu/icudt56l/lo.res index 6157798..282f73f 100644 --- a/src/cobalt/content/icu/icudt56l/lo.res +++ b/src/cobalt/content/icu/icudt56l/lo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lt.res b/src/cobalt/content/icu/icudt56l/lt.res index 00a663c..c3ab11b 100644 --- a/src/cobalt/content/icu/icudt56l/lt.res +++ b/src/cobalt/content/icu/icudt56l/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/lv.res b/src/cobalt/content/icu/icudt56l/lv.res index 1534810..a18464d 100644 --- a/src/cobalt/content/icu/icudt56l/lv.res +++ b/src/cobalt/content/icu/icudt56l/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mfe.res b/src/cobalt/content/icu/icudt56l/mfe.res index 9ad9a6c..b01f52f 100644 --- a/src/cobalt/content/icu/icudt56l/mfe.res +++ b/src/cobalt/content/icu/icudt56l/mfe.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mg.res b/src/cobalt/content/icu/icudt56l/mg.res index 320a39b..a716314 100644 --- a/src/cobalt/content/icu/icudt56l/mg.res +++ b/src/cobalt/content/icu/icudt56l/mg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mk.res b/src/cobalt/content/icu/icudt56l/mk.res index dc18591..16d876e 100644 --- a/src/cobalt/content/icu/icudt56l/mk.res +++ b/src/cobalt/content/icu/icudt56l/mk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ml.res b/src/cobalt/content/icu/icudt56l/ml.res index 955c7c1..412ba51 100644 --- a/src/cobalt/content/icu/icudt56l/ml.res +++ b/src/cobalt/content/icu/icudt56l/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mn.res b/src/cobalt/content/icu/icudt56l/mn.res index 62734c8..4eaf0c0 100644 --- a/src/cobalt/content/icu/icudt56l/mn.res +++ b/src/cobalt/content/icu/icudt56l/mn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mo.res b/src/cobalt/content/icu/icudt56l/mo.res index 7bf1b78..52a5358 100644 --- a/src/cobalt/content/icu/icudt56l/mo.res +++ b/src/cobalt/content/icu/icudt56l/mo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mr.res b/src/cobalt/content/icu/icudt56l/mr.res index 62c9810..b512a48 100644 --- a/src/cobalt/content/icu/icudt56l/mr.res +++ b/src/cobalt/content/icu/icudt56l/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ms.res b/src/cobalt/content/icu/icudt56l/ms.res index 4487127..f079f3b 100644 --- a/src/cobalt/content/icu/icudt56l/ms.res +++ b/src/cobalt/content/icu/icudt56l/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/mt.res b/src/cobalt/content/icu/icudt56l/mt.res index 8321dec..fbbcb37 100644 --- a/src/cobalt/content/icu/icudt56l/mt.res +++ b/src/cobalt/content/icu/icudt56l/mt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/my.res b/src/cobalt/content/icu/icudt56l/my.res index 0bffba5..a940752 100644 --- a/src/cobalt/content/icu/icudt56l/my.res +++ b/src/cobalt/content/icu/icudt56l/my.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nb.res b/src/cobalt/content/icu/icudt56l/nb.res index 0f11d46..1e41d8a 100644 --- a/src/cobalt/content/icu/icudt56l/nb.res +++ b/src/cobalt/content/icu/icudt56l/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ne.res b/src/cobalt/content/icu/icudt56l/ne.res index dbc62bc..ca97326 100644 --- a/src/cobalt/content/icu/icudt56l/ne.res +++ b/src/cobalt/content/icu/icudt56l/ne.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nl.res b/src/cobalt/content/icu/icudt56l/nl.res index 48ae733..f473748 100644 --- a/src/cobalt/content/icu/icudt56l/nl.res +++ b/src/cobalt/content/icu/icudt56l/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nn.res b/src/cobalt/content/icu/icudt56l/nn.res index 5c5db79..9ca09d0 100644 --- a/src/cobalt/content/icu/icudt56l/nn.res +++ b/src/cobalt/content/icu/icudt56l/nn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/no.res b/src/cobalt/content/icu/icudt56l/no.res index 652e722..95b72f1 100644 --- a/src/cobalt/content/icu/icudt56l/no.res +++ b/src/cobalt/content/icu/icudt56l/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/nyn.res b/src/cobalt/content/icu/icudt56l/nyn.res index dd92b68..14c4a68 100644 --- a/src/cobalt/content/icu/icudt56l/nyn.res +++ b/src/cobalt/content/icu/icudt56l/nyn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/om.res b/src/cobalt/content/icu/icudt56l/om.res index dd92b68..14c4a68 100644 --- a/src/cobalt/content/icu/icudt56l/om.res +++ b/src/cobalt/content/icu/icudt56l/om.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/or.res b/src/cobalt/content/icu/icudt56l/or.res index 8708b9e..f2cca67 100644 --- a/src/cobalt/content/icu/icudt56l/or.res +++ b/src/cobalt/content/icu/icudt56l/or.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pa.res b/src/cobalt/content/icu/icudt56l/pa.res index 7a310e0..b1453eb 100644 --- a/src/cobalt/content/icu/icudt56l/pa.res +++ b/src/cobalt/content/icu/icudt56l/pa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pl.res b/src/cobalt/content/icu/icudt56l/pl.res index 2cd9f01..a25c258 100644 --- a/src/cobalt/content/icu/icudt56l/pl.res +++ b/src/cobalt/content/icu/icudt56l/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pool.res b/src/cobalt/content/icu/icudt56l/pool.res index 923a6cb..654a03b 100644 --- a/src/cobalt/content/icu/icudt56l/pool.res +++ b/src/cobalt/content/icu/icudt56l/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ps.res b/src/cobalt/content/icu/icudt56l/ps.res index 7f814f8..b715fc2 100644 --- a/src/cobalt/content/icu/icudt56l/ps.res +++ b/src/cobalt/content/icu/icudt56l/ps.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pt.res b/src/cobalt/content/icu/icudt56l/pt.res index 6abcb75..0055dd7 100644 --- a/src/cobalt/content/icu/icudt56l/pt.res +++ b/src/cobalt/content/icu/icudt56l/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pt_BR.res b/src/cobalt/content/icu/icudt56l/pt_BR.res index 008e4b7..d0ddba1 100644 --- a/src/cobalt/content/icu/icudt56l/pt_BR.res +++ b/src/cobalt/content/icu/icudt56l/pt_BR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/pt_PT.res b/src/cobalt/content/icu/icudt56l/pt_PT.res index 76ca66f..f1a5807 100644 --- a/src/cobalt/content/icu/icudt56l/pt_PT.res +++ b/src/cobalt/content/icu/icudt56l/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/region/en.res b/src/cobalt/content/icu/icudt56l/region/en.res index 967b2a3..bc9a049 100644 --- a/src/cobalt/content/icu/icudt56l/region/en.res +++ b/src/cobalt/content/icu/icudt56l/region/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/region/pool.res b/src/cobalt/content/icu/icudt56l/region/pool.res index 0beeb3a..c8b3a66 100644 --- a/src/cobalt/content/icu/icudt56l/region/pool.res +++ b/src/cobalt/content/icu/icudt56l/region/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/region/root.res b/src/cobalt/content/icu/icudt56l/region/root.res index 72cad82..f7ec23c 100644 --- a/src/cobalt/content/icu/icudt56l/region/root.res +++ b/src/cobalt/content/icu/icudt56l/region/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/rm.res b/src/cobalt/content/icu/icudt56l/rm.res index 8d81b3b..9f468cc 100644 --- a/src/cobalt/content/icu/icudt56l/rm.res +++ b/src/cobalt/content/icu/icudt56l/rm.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/rn.res b/src/cobalt/content/icu/icudt56l/rn.res index dd92b68..14c4a68 100644 --- a/src/cobalt/content/icu/icudt56l/rn.res +++ b/src/cobalt/content/icu/icudt56l/rn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ro.res b/src/cobalt/content/icu/icudt56l/ro.res index df484c6..64953d1 100644 --- a/src/cobalt/content/icu/icudt56l/ro.res +++ b/src/cobalt/content/icu/icudt56l/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ro_MD.res b/src/cobalt/content/icu/icudt56l/ro_MD.res index 8f32770..8a95d37 100644 --- a/src/cobalt/content/icu/icudt56l/ro_MD.res +++ b/src/cobalt/content/icu/icudt56l/ro_MD.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/root.res b/src/cobalt/content/icu/icudt56l/root.res index f9dd09b..749557c 100644 --- a/src/cobalt/content/icu/icudt56l/root.res +++ b/src/cobalt/content/icu/icudt56l/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ru.res b/src/cobalt/content/icu/icudt56l/ru.res index f92eea0..4797943 100644 --- a/src/cobalt/content/icu/icudt56l/ru.res +++ b/src/cobalt/content/icu/icudt56l/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/rw.res b/src/cobalt/content/icu/icudt56l/rw.res index dd92b68..14c4a68 100644 --- a/src/cobalt/content/icu/icudt56l/rw.res +++ b/src/cobalt/content/icu/icudt56l/rw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sh.res b/src/cobalt/content/icu/icudt56l/sh.res index d4f746c..064761b 100644 --- a/src/cobalt/content/icu/icudt56l/sh.res +++ b/src/cobalt/content/icu/icudt56l/sh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/si.res b/src/cobalt/content/icu/icudt56l/si.res index 1e448b7..854a983 100644 --- a/src/cobalt/content/icu/icudt56l/si.res +++ b/src/cobalt/content/icu/icudt56l/si.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sk.res b/src/cobalt/content/icu/icudt56l/sk.res index 77824af..26b057b 100644 --- a/src/cobalt/content/icu/icudt56l/sk.res +++ b/src/cobalt/content/icu/icudt56l/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sl.res b/src/cobalt/content/icu/icudt56l/sl.res index cdd325e..d1fa5b1 100644 --- a/src/cobalt/content/icu/icudt56l/sl.res +++ b/src/cobalt/content/icu/icudt56l/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sn.res b/src/cobalt/content/icu/icudt56l/sn.res index b6e4440..9876284 100644 --- a/src/cobalt/content/icu/icudt56l/sn.res +++ b/src/cobalt/content/icu/icudt56l/sn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/so.res b/src/cobalt/content/icu/icudt56l/so.res index dd92b68..14c4a68 100644 --- a/src/cobalt/content/icu/icudt56l/so.res +++ b/src/cobalt/content/icu/icudt56l/so.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sq.res b/src/cobalt/content/icu/icudt56l/sq.res index 37804c4..2f60b9e 100644 --- a/src/cobalt/content/icu/icudt56l/sq.res +++ b/src/cobalt/content/icu/icudt56l/sq.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sr.res b/src/cobalt/content/icu/icudt56l/sr.res index 4ca52cb..d44d4b0 100644 --- a/src/cobalt/content/icu/icudt56l/sr.res +++ b/src/cobalt/content/icu/icudt56l/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sr_Latn.res b/src/cobalt/content/icu/icudt56l/sr_Latn.res index 0d22fb6..00a544f 100644 --- a/src/cobalt/content/icu/icudt56l/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56l/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sv.res b/src/cobalt/content/icu/icudt56l/sv.res index 35911a5..d152a55 100644 --- a/src/cobalt/content/icu/icudt56l/sv.res +++ b/src/cobalt/content/icu/icudt56l/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/sw.res b/src/cobalt/content/icu/icudt56l/sw.res index f822726..e3fe8e8 100644 --- a/src/cobalt/content/icu/icudt56l/sw.res +++ b/src/cobalt/content/icu/icudt56l/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ta.res b/src/cobalt/content/icu/icudt56l/ta.res index 44e85af..533e622 100644 --- a/src/cobalt/content/icu/icudt56l/ta.res +++ b/src/cobalt/content/icu/icudt56l/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/te.res b/src/cobalt/content/icu/icudt56l/te.res index 2042605..5a9230b 100644 --- a/src/cobalt/content/icu/icudt56l/te.res +++ b/src/cobalt/content/icu/icudt56l/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/tg.res b/src/cobalt/content/icu/icudt56l/tg.res index 0211bfe..f567bf3 100644 --- a/src/cobalt/content/icu/icudt56l/tg.res +++ b/src/cobalt/content/icu/icudt56l/tg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/th.res b/src/cobalt/content/icu/icudt56l/th.res index dc226b5..5cab461 100644 --- a/src/cobalt/content/icu/icudt56l/th.res +++ b/src/cobalt/content/icu/icudt56l/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ti.res b/src/cobalt/content/icu/icudt56l/ti.res index 397d15f..5199c3d 100644 --- a/src/cobalt/content/icu/icudt56l/ti.res +++ b/src/cobalt/content/icu/icudt56l/ti.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/tl.res b/src/cobalt/content/icu/icudt56l/tl.res index c65b0a3..d6944ac 100644 --- a/src/cobalt/content/icu/icudt56l/tl.res +++ b/src/cobalt/content/icu/icudt56l/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/to.res b/src/cobalt/content/icu/icudt56l/to.res index db95267..ab19db3 100644 --- a/src/cobalt/content/icu/icudt56l/to.res +++ b/src/cobalt/content/icu/icudt56l/to.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/tr.res b/src/cobalt/content/icu/icudt56l/tr.res index 4c2a4ed..037b9f0 100644 --- a/src/cobalt/content/icu/icudt56l/tr.res +++ b/src/cobalt/content/icu/icudt56l/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/translit/root.res b/src/cobalt/content/icu/icudt56l/translit/root.res index 0686735..ec75cab 100644 --- a/src/cobalt/content/icu/icudt56l/translit/root.res +++ b/src/cobalt/content/icu/icudt56l/translit/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/uk.res b/src/cobalt/content/icu/icudt56l/uk.res index 0c87ee3..c408f0d 100644 --- a/src/cobalt/content/icu/icudt56l/uk.res +++ b/src/cobalt/content/icu/icudt56l/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/am.res b/src/cobalt/content/icu/icudt56l/unit/am.res index dbf8c3e..6fc7821 100644 --- a/src/cobalt/content/icu/icudt56l/unit/am.res +++ b/src/cobalt/content/icu/icudt56l/unit/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ar.res b/src/cobalt/content/icu/icudt56l/unit/ar.res index 9b12292..e2aac94 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ar.res +++ b/src/cobalt/content/icu/icudt56l/unit/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/bg.res b/src/cobalt/content/icu/icudt56l/unit/bg.res index 6e2c48e..a1c9cda 100644 --- a/src/cobalt/content/icu/icudt56l/unit/bg.res +++ b/src/cobalt/content/icu/icudt56l/unit/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/bn.res b/src/cobalt/content/icu/icudt56l/unit/bn.res index 892495e..a212216 100644 --- a/src/cobalt/content/icu/icudt56l/unit/bn.res +++ b/src/cobalt/content/icu/icudt56l/unit/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ca.res b/src/cobalt/content/icu/icudt56l/unit/ca.res index d95bf24..e842067 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ca.res +++ b/src/cobalt/content/icu/icudt56l/unit/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/cs.res b/src/cobalt/content/icu/icudt56l/unit/cs.res index 1fe2bd2..64f2993 100644 --- a/src/cobalt/content/icu/icudt56l/unit/cs.res +++ b/src/cobalt/content/icu/icudt56l/unit/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/da.res b/src/cobalt/content/icu/icudt56l/unit/da.res index ab70915..ed1b59f 100644 --- a/src/cobalt/content/icu/icudt56l/unit/da.res +++ b/src/cobalt/content/icu/icudt56l/unit/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/de.res b/src/cobalt/content/icu/icudt56l/unit/de.res index d9e899a..8208373 100644 --- a/src/cobalt/content/icu/icudt56l/unit/de.res +++ b/src/cobalt/content/icu/icudt56l/unit/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/de_CH.res b/src/cobalt/content/icu/icudt56l/unit/de_CH.res index ce92e01..6eea893 100644 --- a/src/cobalt/content/icu/icudt56l/unit/de_CH.res +++ b/src/cobalt/content/icu/icudt56l/unit/de_CH.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/el.res b/src/cobalt/content/icu/icudt56l/unit/el.res index cef1fc9..6dd02a8 100644 --- a/src/cobalt/content/icu/icudt56l/unit/el.res +++ b/src/cobalt/content/icu/icudt56l/unit/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en.res b/src/cobalt/content/icu/icudt56l/unit/en.res index c0e9641..dd313d6 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en.res +++ b/src/cobalt/content/icu/icudt56l/unit/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_001.res b/src/cobalt/content/icu/icudt56l/unit/en_001.res index 0aaea4c..4e099c3 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_001.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_150.res b/src/cobalt/content/icu/icudt56l/unit/en_150.res index 7311a35..c7f45f2 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_150.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_AU.res b/src/cobalt/content/icu/icudt56l/unit/en_AU.res index 6861b55..48a18cf 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_AU.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_CA.res b/src/cobalt/content/icu/icudt56l/unit/en_CA.res index a992b66..dd233bc 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_CA.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_GB.res b/src/cobalt/content/icu/icudt56l/unit/en_GB.res index a251b48..7e38b76 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_GB.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_IN.res b/src/cobalt/content/icu/icudt56l/unit/en_IN.res index 403d14d..9bdaf65 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_IN.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_NZ.res b/src/cobalt/content/icu/icudt56l/unit/en_NZ.res index 403d14d..9bdaf65 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_NZ.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/en_ZA.res b/src/cobalt/content/icu/icudt56l/unit/en_ZA.res index 403d14d..9bdaf65 100644 --- a/src/cobalt/content/icu/icudt56l/unit/en_ZA.res +++ b/src/cobalt/content/icu/icudt56l/unit/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es.res b/src/cobalt/content/icu/icudt56l/unit/es.res index 0e05256..3e9e9d4 100644 --- a/src/cobalt/content/icu/icudt56l/unit/es.res +++ b/src/cobalt/content/icu/icudt56l/unit/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_419.res b/src/cobalt/content/icu/icudt56l/unit/es_419.res index f5550ca..b91698d 100644 --- a/src/cobalt/content/icu/icudt56l/unit/es_419.res +++ b/src/cobalt/content/icu/icudt56l/unit/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_AR.res b/src/cobalt/content/icu/icudt56l/unit/es_AR.res index b45c868..7513b45 100644 --- a/src/cobalt/content/icu/icudt56l/unit/es_AR.res +++ b/src/cobalt/content/icu/icudt56l/unit/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_MX.res b/src/cobalt/content/icu/icudt56l/unit/es_MX.res index 427e5f5..711b319 100644 --- a/src/cobalt/content/icu/icudt56l/unit/es_MX.res +++ b/src/cobalt/content/icu/icudt56l/unit/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/es_US.res b/src/cobalt/content/icu/icudt56l/unit/es_US.res index 9b8944a..1562007 100644 --- a/src/cobalt/content/icu/icudt56l/unit/es_US.res +++ b/src/cobalt/content/icu/icudt56l/unit/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/et.res b/src/cobalt/content/icu/icudt56l/unit/et.res index d237538..e054a78 100644 --- a/src/cobalt/content/icu/icudt56l/unit/et.res +++ b/src/cobalt/content/icu/icudt56l/unit/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fa.res b/src/cobalt/content/icu/icudt56l/unit/fa.res index b701d58..e2682bc 100644 --- a/src/cobalt/content/icu/icudt56l/unit/fa.res +++ b/src/cobalt/content/icu/icudt56l/unit/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fi.res b/src/cobalt/content/icu/icudt56l/unit/fi.res index dbf5230..80bc2a6 100644 --- a/src/cobalt/content/icu/icudt56l/unit/fi.res +++ b/src/cobalt/content/icu/icudt56l/unit/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fil.res b/src/cobalt/content/icu/icudt56l/unit/fil.res index bf058da..9e033a5 100644 --- a/src/cobalt/content/icu/icudt56l/unit/fil.res +++ b/src/cobalt/content/icu/icudt56l/unit/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fr.res b/src/cobalt/content/icu/icudt56l/unit/fr.res index ab42c66..a55f106 100644 --- a/src/cobalt/content/icu/icudt56l/unit/fr.res +++ b/src/cobalt/content/icu/icudt56l/unit/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/fr_CA.res b/src/cobalt/content/icu/icudt56l/unit/fr_CA.res index 02360e7..8beacd0 100644 --- a/src/cobalt/content/icu/icudt56l/unit/fr_CA.res +++ b/src/cobalt/content/icu/icudt56l/unit/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/gu.res b/src/cobalt/content/icu/icudt56l/unit/gu.res index 509ed57..b01ba42 100644 --- a/src/cobalt/content/icu/icudt56l/unit/gu.res +++ b/src/cobalt/content/icu/icudt56l/unit/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/he.res b/src/cobalt/content/icu/icudt56l/unit/he.res index 954f991..ba86247 100644 --- a/src/cobalt/content/icu/icudt56l/unit/he.res +++ b/src/cobalt/content/icu/icudt56l/unit/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/hi.res b/src/cobalt/content/icu/icudt56l/unit/hi.res index 27421d8..68994f8 100644 --- a/src/cobalt/content/icu/icudt56l/unit/hi.res +++ b/src/cobalt/content/icu/icudt56l/unit/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/hr.res b/src/cobalt/content/icu/icudt56l/unit/hr.res index d40e0f1..4e9add2 100644 --- a/src/cobalt/content/icu/icudt56l/unit/hr.res +++ b/src/cobalt/content/icu/icudt56l/unit/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/hu.res b/src/cobalt/content/icu/icudt56l/unit/hu.res index 06bcb33..30d1204 100644 --- a/src/cobalt/content/icu/icudt56l/unit/hu.res +++ b/src/cobalt/content/icu/icudt56l/unit/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/id.res b/src/cobalt/content/icu/icudt56l/unit/id.res index a2ffa76..a6fe7d5 100644 --- a/src/cobalt/content/icu/icudt56l/unit/id.res +++ b/src/cobalt/content/icu/icudt56l/unit/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/in.res b/src/cobalt/content/icu/icudt56l/unit/in.res index 33be5ef..72942a4 100644 --- a/src/cobalt/content/icu/icudt56l/unit/in.res +++ b/src/cobalt/content/icu/icudt56l/unit/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/it.res b/src/cobalt/content/icu/icudt56l/unit/it.res index dd8e132..f5122ea 100644 --- a/src/cobalt/content/icu/icudt56l/unit/it.res +++ b/src/cobalt/content/icu/icudt56l/unit/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/iw.res b/src/cobalt/content/icu/icudt56l/unit/iw.res index 821b606..2481a96 100644 --- a/src/cobalt/content/icu/icudt56l/unit/iw.res +++ b/src/cobalt/content/icu/icudt56l/unit/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ja.res b/src/cobalt/content/icu/icudt56l/unit/ja.res index 49099c7..679330e 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ja.res +++ b/src/cobalt/content/icu/icudt56l/unit/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/kn.res b/src/cobalt/content/icu/icudt56l/unit/kn.res index 2397b74..8f7162a 100644 --- a/src/cobalt/content/icu/icudt56l/unit/kn.res +++ b/src/cobalt/content/icu/icudt56l/unit/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ko.res b/src/cobalt/content/icu/icudt56l/unit/ko.res index 160f5b2..ddaf257 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ko.res +++ b/src/cobalt/content/icu/icudt56l/unit/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/lt.res b/src/cobalt/content/icu/icudt56l/unit/lt.res index f1ae385..cb132b9 100644 --- a/src/cobalt/content/icu/icudt56l/unit/lt.res +++ b/src/cobalt/content/icu/icudt56l/unit/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/lv.res b/src/cobalt/content/icu/icudt56l/unit/lv.res index a9b3785..a454b77 100644 --- a/src/cobalt/content/icu/icudt56l/unit/lv.res +++ b/src/cobalt/content/icu/icudt56l/unit/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ml.res b/src/cobalt/content/icu/icudt56l/unit/ml.res index 0e78247..68a34cc 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ml.res +++ b/src/cobalt/content/icu/icudt56l/unit/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/mr.res b/src/cobalt/content/icu/icudt56l/unit/mr.res index 934d2cd..6f1059b 100644 --- a/src/cobalt/content/icu/icudt56l/unit/mr.res +++ b/src/cobalt/content/icu/icudt56l/unit/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ms.res b/src/cobalt/content/icu/icudt56l/unit/ms.res index 2709c71..f337393 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ms.res +++ b/src/cobalt/content/icu/icudt56l/unit/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/nb.res b/src/cobalt/content/icu/icudt56l/unit/nb.res index e30a45c..2889a2b 100644 --- a/src/cobalt/content/icu/icudt56l/unit/nb.res +++ b/src/cobalt/content/icu/icudt56l/unit/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/nl.res b/src/cobalt/content/icu/icudt56l/unit/nl.res index 5550071..f24a3f7 100644 --- a/src/cobalt/content/icu/icudt56l/unit/nl.res +++ b/src/cobalt/content/icu/icudt56l/unit/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/no.res b/src/cobalt/content/icu/icudt56l/unit/no.res index e266b67..63bb003 100644 --- a/src/cobalt/content/icu/icudt56l/unit/no.res +++ b/src/cobalt/content/icu/icudt56l/unit/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pl.res b/src/cobalt/content/icu/icudt56l/unit/pl.res index f54580b..4559eca 100644 --- a/src/cobalt/content/icu/icudt56l/unit/pl.res +++ b/src/cobalt/content/icu/icudt56l/unit/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pool.res b/src/cobalt/content/icu/icudt56l/unit/pool.res index fa4b9be..e5caab3 100644 --- a/src/cobalt/content/icu/icudt56l/unit/pool.res +++ b/src/cobalt/content/icu/icudt56l/unit/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pt.res b/src/cobalt/content/icu/icudt56l/unit/pt.res index d237e93..ed56d01 100644 --- a/src/cobalt/content/icu/icudt56l/unit/pt.res +++ b/src/cobalt/content/icu/icudt56l/unit/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/pt_PT.res b/src/cobalt/content/icu/icudt56l/unit/pt_PT.res index eea915f..4e786a7 100644 --- a/src/cobalt/content/icu/icudt56l/unit/pt_PT.res +++ b/src/cobalt/content/icu/icudt56l/unit/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ro.res b/src/cobalt/content/icu/icudt56l/unit/ro.res index d5d1e80..efe4f07 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ro.res +++ b/src/cobalt/content/icu/icudt56l/unit/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/root.res b/src/cobalt/content/icu/icudt56l/unit/root.res index d05cba2..b873601 100644 --- a/src/cobalt/content/icu/icudt56l/unit/root.res +++ b/src/cobalt/content/icu/icudt56l/unit/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ru.res b/src/cobalt/content/icu/icudt56l/unit/ru.res index a215804..43a5ccd 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ru.res +++ b/src/cobalt/content/icu/icudt56l/unit/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sh.res b/src/cobalt/content/icu/icudt56l/unit/sh.res index eca4610..be1e011 100644 --- a/src/cobalt/content/icu/icudt56l/unit/sh.res +++ b/src/cobalt/content/icu/icudt56l/unit/sh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sk.res b/src/cobalt/content/icu/icudt56l/unit/sk.res index e89c411..7e7ce75 100644 --- a/src/cobalt/content/icu/icudt56l/unit/sk.res +++ b/src/cobalt/content/icu/icudt56l/unit/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sl.res b/src/cobalt/content/icu/icudt56l/unit/sl.res index 60cf2c2..9f4baaa 100644 --- a/src/cobalt/content/icu/icudt56l/unit/sl.res +++ b/src/cobalt/content/icu/icudt56l/unit/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sr.res b/src/cobalt/content/icu/icudt56l/unit/sr.res index 0bc5ded..0844cb6 100644 --- a/src/cobalt/content/icu/icudt56l/unit/sr.res +++ b/src/cobalt/content/icu/icudt56l/unit/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res b/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res index cf10bd7..cc14079 100644 --- a/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res +++ b/src/cobalt/content/icu/icudt56l/unit/sr_Latn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sv.res b/src/cobalt/content/icu/icudt56l/unit/sv.res index 0bdb977..1eb9f6e 100644 --- a/src/cobalt/content/icu/icudt56l/unit/sv.res +++ b/src/cobalt/content/icu/icudt56l/unit/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/sw.res b/src/cobalt/content/icu/icudt56l/unit/sw.res index ad7d258..329130b 100644 --- a/src/cobalt/content/icu/icudt56l/unit/sw.res +++ b/src/cobalt/content/icu/icudt56l/unit/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/ta.res b/src/cobalt/content/icu/icudt56l/unit/ta.res index 2560e71..391bc60 100644 --- a/src/cobalt/content/icu/icudt56l/unit/ta.res +++ b/src/cobalt/content/icu/icudt56l/unit/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/te.res b/src/cobalt/content/icu/icudt56l/unit/te.res index 895a706..69b2219 100644 --- a/src/cobalt/content/icu/icudt56l/unit/te.res +++ b/src/cobalt/content/icu/icudt56l/unit/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/th.res b/src/cobalt/content/icu/icudt56l/unit/th.res index 0412ef9..bafea5b 100644 --- a/src/cobalt/content/icu/icudt56l/unit/th.res +++ b/src/cobalt/content/icu/icudt56l/unit/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/tl.res b/src/cobalt/content/icu/icudt56l/unit/tl.res index 200a065..10ce65b 100644 --- a/src/cobalt/content/icu/icudt56l/unit/tl.res +++ b/src/cobalt/content/icu/icudt56l/unit/tl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/tr.res b/src/cobalt/content/icu/icudt56l/unit/tr.res index bafbe4f..0b1ae28 100644 --- a/src/cobalt/content/icu/icudt56l/unit/tr.res +++ b/src/cobalt/content/icu/icudt56l/unit/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/uk.res b/src/cobalt/content/icu/icudt56l/unit/uk.res index 6bdacc9..bf04599 100644 --- a/src/cobalt/content/icu/icudt56l/unit/uk.res +++ b/src/cobalt/content/icu/icudt56l/unit/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/vi.res b/src/cobalt/content/icu/icudt56l/unit/vi.res index 62b342c..0b084c6 100644 --- a/src/cobalt/content/icu/icudt56l/unit/vi.res +++ b/src/cobalt/content/icu/icudt56l/unit/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh.res b/src/cobalt/content/icu/icudt56l/unit/zh.res index fb82379..0aca7fd 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_CN.res b/src/cobalt/content/icu/icudt56l/unit/zh_CN.res index 2143911..c2a8662 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_CN.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_HK.res b/src/cobalt/content/icu/icudt56l/unit/zh_HK.res index 3ecb9af..afeade2 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_HK.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res index 390df10..5f8b9d8 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res index 52171e6..0e5fcc0 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res index 60ebd39..893561a 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res index b38fda6..6480979 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res index 28757bc..885024c 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res index 52171e6..0e5fcc0 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_SG.res b/src/cobalt/content/icu/icudt56l/unit/zh_SG.res index 591fed6..6c93f05 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_SG.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/unit/zh_TW.res b/src/cobalt/content/icu/icudt56l/unit/zh_TW.res index 9cfe4de..67a1f01 100644 --- a/src/cobalt/content/icu/icudt56l/unit/zh_TW.res +++ b/src/cobalt/content/icu/icudt56l/unit/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/ur.res b/src/cobalt/content/icu/icudt56l/ur.res index 8ce943b..9b26777 100644 --- a/src/cobalt/content/icu/icudt56l/ur.res +++ b/src/cobalt/content/icu/icudt56l/ur.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/uz.res b/src/cobalt/content/icu/icudt56l/uz.res index c48eb7c..fcc6e35 100644 --- a/src/cobalt/content/icu/icudt56l/uz.res +++ b/src/cobalt/content/icu/icudt56l/uz.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/vi.res b/src/cobalt/content/icu/icudt56l/vi.res index fa0bc69..bd29812 100644 --- a/src/cobalt/content/icu/icudt56l/vi.res +++ b/src/cobalt/content/icu/icudt56l/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/wa.res b/src/cobalt/content/icu/icudt56l/wa.res index b33131e..9823bb0 100644 --- a/src/cobalt/content/icu/icudt56l/wa.res +++ b/src/cobalt/content/icu/icudt56l/wa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/yo.res b/src/cobalt/content/icu/icudt56l/yo.res index 9d6fcf8..ba09dca 100644 --- a/src/cobalt/content/icu/icudt56l/yo.res +++ b/src/cobalt/content/icu/icudt56l/yo.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh.res b/src/cobalt/content/icu/icudt56l/zh.res index 8693ef0..1754876 100644 --- a/src/cobalt/content/icu/icudt56l/zh.res +++ b/src/cobalt/content/icu/icudt56l/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_CN.res b/src/cobalt/content/icu/icudt56l/zh_CN.res index 6413b61..306efe4 100644 --- a/src/cobalt/content/icu/icudt56l/zh_CN.res +++ b/src/cobalt/content/icu/icudt56l/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_HK.res b/src/cobalt/content/icu/icudt56l/zh_HK.res index 90ec33d..d30e69d 100644 --- a/src/cobalt/content/icu/icudt56l/zh_HK.res +++ b/src/cobalt/content/icu/icudt56l/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hans.res b/src/cobalt/content/icu/icudt56l/zh_Hans.res index 008e4b7..d0ddba1 100644 --- a/src/cobalt/content/icu/icudt56l/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56l/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res index 008e4b7..d0ddba1 100644 --- a/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56l/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res index 7d56843..5290c33 100644 --- a/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56l/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hant.res b/src/cobalt/content/icu/icudt56l/zh_Hant.res index fa6cf1d..6fb1f94 100644 --- a/src/cobalt/content/icu/icudt56l/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56l/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res index c824509..25384c6 100644 --- a/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56l/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res index 008e4b7..d0ddba1 100644 --- a/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56l/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_SG.res b/src/cobalt/content/icu/icudt56l/zh_SG.res index b4a5fc2..f80c73c 100644 --- a/src/cobalt/content/icu/icudt56l/zh_SG.res +++ b/src/cobalt/content/icu/icudt56l/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zh_TW.res b/src/cobalt/content/icu/icudt56l/zh_TW.res index 5b8785d..dd21dc5 100644 --- a/src/cobalt/content/icu/icudt56l/zh_TW.res +++ b/src/cobalt/content/icu/icudt56l/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/am.res b/src/cobalt/content/icu/icudt56l/zone/am.res index 0ca203b..a615640 100644 --- a/src/cobalt/content/icu/icudt56l/zone/am.res +++ b/src/cobalt/content/icu/icudt56l/zone/am.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ar.res b/src/cobalt/content/icu/icudt56l/zone/ar.res index 83694eb..24ab72f 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ar.res +++ b/src/cobalt/content/icu/icudt56l/zone/ar.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/bg.res b/src/cobalt/content/icu/icudt56l/zone/bg.res index 9b8d165..4d07990 100644 --- a/src/cobalt/content/icu/icudt56l/zone/bg.res +++ b/src/cobalt/content/icu/icudt56l/zone/bg.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/bn.res b/src/cobalt/content/icu/icudt56l/zone/bn.res index d6a7c89..24a512e 100644 --- a/src/cobalt/content/icu/icudt56l/zone/bn.res +++ b/src/cobalt/content/icu/icudt56l/zone/bn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ca.res b/src/cobalt/content/icu/icudt56l/zone/ca.res index fd8e6e8..475907e 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ca.res +++ b/src/cobalt/content/icu/icudt56l/zone/ca.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/cs.res b/src/cobalt/content/icu/icudt56l/zone/cs.res index 57351b4..a177731 100644 --- a/src/cobalt/content/icu/icudt56l/zone/cs.res +++ b/src/cobalt/content/icu/icudt56l/zone/cs.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/da.res b/src/cobalt/content/icu/icudt56l/zone/da.res index 85deb82..00595e7 100644 --- a/src/cobalt/content/icu/icudt56l/zone/da.res +++ b/src/cobalt/content/icu/icudt56l/zone/da.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/de.res b/src/cobalt/content/icu/icudt56l/zone/de.res index 80b998d..1fe2466 100644 --- a/src/cobalt/content/icu/icudt56l/zone/de.res +++ b/src/cobalt/content/icu/icudt56l/zone/de.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/el.res b/src/cobalt/content/icu/icudt56l/zone/el.res index 10dcfc0..8211aa7 100644 --- a/src/cobalt/content/icu/icudt56l/zone/el.res +++ b/src/cobalt/content/icu/icudt56l/zone/el.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en.res b/src/cobalt/content/icu/icudt56l/zone/en.res index cefa19c..16fd7d5 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en.res +++ b/src/cobalt/content/icu/icudt56l/zone/en.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_001.res b/src/cobalt/content/icu/icudt56l/zone/en_001.res index 8dc348a..b630c21 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_001.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_001.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_150.res b/src/cobalt/content/icu/icudt56l/zone/en_150.res index fc046d3..58ea37f 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_150.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_150.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_AU.res b/src/cobalt/content/icu/icudt56l/zone/en_AU.res index 603245e..b44fc79 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_AU.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_AU.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_CA.res b/src/cobalt/content/icu/icudt56l/zone/en_CA.res index a0ccf7c..92a64b5 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_CA.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_GB.res b/src/cobalt/content/icu/icudt56l/zone/en_GB.res index b2340ce..62b5cd5 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_GB.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_GB.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_IN.res b/src/cobalt/content/icu/icudt56l/zone/en_IN.res index 4dae4de..8c37488 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_IN.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_IN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_NZ.res b/src/cobalt/content/icu/icudt56l/zone/en_NZ.res index 2cee9fe..472c851 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_NZ.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_NZ.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/en_ZA.res b/src/cobalt/content/icu/icudt56l/zone/en_ZA.res index 0de2632..6061649 100644 --- a/src/cobalt/content/icu/icudt56l/zone/en_ZA.res +++ b/src/cobalt/content/icu/icudt56l/zone/en_ZA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es.res b/src/cobalt/content/icu/icudt56l/zone/es.res index a678c63..d0e1844 100644 --- a/src/cobalt/content/icu/icudt56l/zone/es.res +++ b/src/cobalt/content/icu/icudt56l/zone/es.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_419.res b/src/cobalt/content/icu/icudt56l/zone/es_419.res index a2ce67b..5361981 100644 --- a/src/cobalt/content/icu/icudt56l/zone/es_419.res +++ b/src/cobalt/content/icu/icudt56l/zone/es_419.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_AR.res b/src/cobalt/content/icu/icudt56l/zone/es_AR.res index 4ee9778..565e293 100644 --- a/src/cobalt/content/icu/icudt56l/zone/es_AR.res +++ b/src/cobalt/content/icu/icudt56l/zone/es_AR.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_MX.res b/src/cobalt/content/icu/icudt56l/zone/es_MX.res index 800004b..ba6a4f6 100644 --- a/src/cobalt/content/icu/icudt56l/zone/es_MX.res +++ b/src/cobalt/content/icu/icudt56l/zone/es_MX.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/es_US.res b/src/cobalt/content/icu/icudt56l/zone/es_US.res index de33554..53d28ff 100644 --- a/src/cobalt/content/icu/icudt56l/zone/es_US.res +++ b/src/cobalt/content/icu/icudt56l/zone/es_US.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/et.res b/src/cobalt/content/icu/icudt56l/zone/et.res index 9a5a38b..ef24a3b 100644 --- a/src/cobalt/content/icu/icudt56l/zone/et.res +++ b/src/cobalt/content/icu/icudt56l/zone/et.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fa.res b/src/cobalt/content/icu/icudt56l/zone/fa.res index 0c46d63..5714cb5 100644 --- a/src/cobalt/content/icu/icudt56l/zone/fa.res +++ b/src/cobalt/content/icu/icudt56l/zone/fa.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fi.res b/src/cobalt/content/icu/icudt56l/zone/fi.res index 18e01f3..6a5e620 100644 --- a/src/cobalt/content/icu/icudt56l/zone/fi.res +++ b/src/cobalt/content/icu/icudt56l/zone/fi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fil.res b/src/cobalt/content/icu/icudt56l/zone/fil.res index e9c8898..e129a7d 100644 --- a/src/cobalt/content/icu/icudt56l/zone/fil.res +++ b/src/cobalt/content/icu/icudt56l/zone/fil.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fr.res b/src/cobalt/content/icu/icudt56l/zone/fr.res index 7b11d57..6478e5c 100644 --- a/src/cobalt/content/icu/icudt56l/zone/fr.res +++ b/src/cobalt/content/icu/icudt56l/zone/fr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/fr_CA.res b/src/cobalt/content/icu/icudt56l/zone/fr_CA.res index 4581455..bfc2acd 100644 --- a/src/cobalt/content/icu/icudt56l/zone/fr_CA.res +++ b/src/cobalt/content/icu/icudt56l/zone/fr_CA.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/gu.res b/src/cobalt/content/icu/icudt56l/zone/gu.res index 837e497..4b74231 100644 --- a/src/cobalt/content/icu/icudt56l/zone/gu.res +++ b/src/cobalt/content/icu/icudt56l/zone/gu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/he.res b/src/cobalt/content/icu/icudt56l/zone/he.res index eea5121..c237cdf 100644 --- a/src/cobalt/content/icu/icudt56l/zone/he.res +++ b/src/cobalt/content/icu/icudt56l/zone/he.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/hi.res b/src/cobalt/content/icu/icudt56l/zone/hi.res index 890d0d6e..8da58fd 100644 --- a/src/cobalt/content/icu/icudt56l/zone/hi.res +++ b/src/cobalt/content/icu/icudt56l/zone/hi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/hr.res b/src/cobalt/content/icu/icudt56l/zone/hr.res index 422cc73..4b68b94 100644 --- a/src/cobalt/content/icu/icudt56l/zone/hr.res +++ b/src/cobalt/content/icu/icudt56l/zone/hr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/hu.res b/src/cobalt/content/icu/icudt56l/zone/hu.res index bcf5a18..8b91cf2 100644 --- a/src/cobalt/content/icu/icudt56l/zone/hu.res +++ b/src/cobalt/content/icu/icudt56l/zone/hu.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/id.res b/src/cobalt/content/icu/icudt56l/zone/id.res index e59ebcc..6b944c0 100644 --- a/src/cobalt/content/icu/icudt56l/zone/id.res +++ b/src/cobalt/content/icu/icudt56l/zone/id.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/in.res b/src/cobalt/content/icu/icudt56l/zone/in.res index 6c9d80f..8ba67ac 100644 --- a/src/cobalt/content/icu/icudt56l/zone/in.res +++ b/src/cobalt/content/icu/icudt56l/zone/in.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/it.res b/src/cobalt/content/icu/icudt56l/zone/it.res index 3243f92..d8d1e1f 100644 --- a/src/cobalt/content/icu/icudt56l/zone/it.res +++ b/src/cobalt/content/icu/icudt56l/zone/it.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/iw.res b/src/cobalt/content/icu/icudt56l/zone/iw.res index 26c3f5d..3a64c91 100644 --- a/src/cobalt/content/icu/icudt56l/zone/iw.res +++ b/src/cobalt/content/icu/icudt56l/zone/iw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ja.res b/src/cobalt/content/icu/icudt56l/zone/ja.res index 81e07bf..ca870bb 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ja.res +++ b/src/cobalt/content/icu/icudt56l/zone/ja.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/kn.res b/src/cobalt/content/icu/icudt56l/zone/kn.res index e1a67d9..0aa5fd5 100644 --- a/src/cobalt/content/icu/icudt56l/zone/kn.res +++ b/src/cobalt/content/icu/icudt56l/zone/kn.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ko.res b/src/cobalt/content/icu/icudt56l/zone/ko.res index 2a13eef..e91d1f2 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ko.res +++ b/src/cobalt/content/icu/icudt56l/zone/ko.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/lt.res b/src/cobalt/content/icu/icudt56l/zone/lt.res index c951cdf..c1fb729 100644 --- a/src/cobalt/content/icu/icudt56l/zone/lt.res +++ b/src/cobalt/content/icu/icudt56l/zone/lt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/lv.res b/src/cobalt/content/icu/icudt56l/zone/lv.res index fbc0d3a..8187c0a 100644 --- a/src/cobalt/content/icu/icudt56l/zone/lv.res +++ b/src/cobalt/content/icu/icudt56l/zone/lv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ml.res b/src/cobalt/content/icu/icudt56l/zone/ml.res index 0bbb558..5e517c5 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ml.res +++ b/src/cobalt/content/icu/icudt56l/zone/ml.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/mr.res b/src/cobalt/content/icu/icudt56l/zone/mr.res index c427585..f065500 100644 --- a/src/cobalt/content/icu/icudt56l/zone/mr.res +++ b/src/cobalt/content/icu/icudt56l/zone/mr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ms.res b/src/cobalt/content/icu/icudt56l/zone/ms.res index 74c35f0..0681ef9c 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ms.res +++ b/src/cobalt/content/icu/icudt56l/zone/ms.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/nb.res b/src/cobalt/content/icu/icudt56l/zone/nb.res index 8964a4c..fb69575 100644 --- a/src/cobalt/content/icu/icudt56l/zone/nb.res +++ b/src/cobalt/content/icu/icudt56l/zone/nb.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/nl.res b/src/cobalt/content/icu/icudt56l/zone/nl.res index e4fd809..a0817f6 100644 --- a/src/cobalt/content/icu/icudt56l/zone/nl.res +++ b/src/cobalt/content/icu/icudt56l/zone/nl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/no.res b/src/cobalt/content/icu/icudt56l/zone/no.res index d674a96..707257a 100644 --- a/src/cobalt/content/icu/icudt56l/zone/no.res +++ b/src/cobalt/content/icu/icudt56l/zone/no.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pl.res b/src/cobalt/content/icu/icudt56l/zone/pl.res index 6b54d59..643202a 100644 --- a/src/cobalt/content/icu/icudt56l/zone/pl.res +++ b/src/cobalt/content/icu/icudt56l/zone/pl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pool.res b/src/cobalt/content/icu/icudt56l/zone/pool.res index 20ff031..6be0d1a 100644 --- a/src/cobalt/content/icu/icudt56l/zone/pool.res +++ b/src/cobalt/content/icu/icudt56l/zone/pool.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pt.res b/src/cobalt/content/icu/icudt56l/zone/pt.res index 5cc633e..c582c3c 100644 --- a/src/cobalt/content/icu/icudt56l/zone/pt.res +++ b/src/cobalt/content/icu/icudt56l/zone/pt.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/pt_PT.res b/src/cobalt/content/icu/icudt56l/zone/pt_PT.res index f935c23..c27e411 100644 --- a/src/cobalt/content/icu/icudt56l/zone/pt_PT.res +++ b/src/cobalt/content/icu/icudt56l/zone/pt_PT.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ro.res b/src/cobalt/content/icu/icudt56l/zone/ro.res index 793b79d..602535c 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ro.res +++ b/src/cobalt/content/icu/icudt56l/zone/ro.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/root.res b/src/cobalt/content/icu/icudt56l/zone/root.res index 4b5d6a5..ccf6129 100644 --- a/src/cobalt/content/icu/icudt56l/zone/root.res +++ b/src/cobalt/content/icu/icudt56l/zone/root.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ru.res b/src/cobalt/content/icu/icudt56l/zone/ru.res index c1f7cc5..7640ffe 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ru.res +++ b/src/cobalt/content/icu/icudt56l/zone/ru.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sk.res b/src/cobalt/content/icu/icudt56l/zone/sk.res index 960272e..265d646 100644 --- a/src/cobalt/content/icu/icudt56l/zone/sk.res +++ b/src/cobalt/content/icu/icudt56l/zone/sk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sl.res b/src/cobalt/content/icu/icudt56l/zone/sl.res index 2b9d73b..f8b0996 100644 --- a/src/cobalt/content/icu/icudt56l/zone/sl.res +++ b/src/cobalt/content/icu/icudt56l/zone/sl.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sr.res b/src/cobalt/content/icu/icudt56l/zone/sr.res index 04aafaf..1caa8c6 100644 --- a/src/cobalt/content/icu/icudt56l/zone/sr.res +++ b/src/cobalt/content/icu/icudt56l/zone/sr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sv.res b/src/cobalt/content/icu/icudt56l/zone/sv.res index 6acfde0..ffc1ca7 100644 --- a/src/cobalt/content/icu/icudt56l/zone/sv.res +++ b/src/cobalt/content/icu/icudt56l/zone/sv.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/sw.res b/src/cobalt/content/icu/icudt56l/zone/sw.res index d29d17f..90e7f83 100644 --- a/src/cobalt/content/icu/icudt56l/zone/sw.res +++ b/src/cobalt/content/icu/icudt56l/zone/sw.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/ta.res b/src/cobalt/content/icu/icudt56l/zone/ta.res index 3dabd4b..14e7724 100644 --- a/src/cobalt/content/icu/icudt56l/zone/ta.res +++ b/src/cobalt/content/icu/icudt56l/zone/ta.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/te.res b/src/cobalt/content/icu/icudt56l/zone/te.res index 6964555..b31f348 100644 --- a/src/cobalt/content/icu/icudt56l/zone/te.res +++ b/src/cobalt/content/icu/icudt56l/zone/te.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/th.res b/src/cobalt/content/icu/icudt56l/zone/th.res index dc1cd79..7be82bf 100644 --- a/src/cobalt/content/icu/icudt56l/zone/th.res +++ b/src/cobalt/content/icu/icudt56l/zone/th.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/tr.res b/src/cobalt/content/icu/icudt56l/zone/tr.res index e9f0f1e..7672569 100644 --- a/src/cobalt/content/icu/icudt56l/zone/tr.res +++ b/src/cobalt/content/icu/icudt56l/zone/tr.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res b/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res index 1e36cea..463ab0f 100644 --- a/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res +++ b/src/cobalt/content/icu/icudt56l/zone/tzdbNames.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/uk.res b/src/cobalt/content/icu/icudt56l/zone/uk.res index e51f2e4..ca07a8f 100644 --- a/src/cobalt/content/icu/icudt56l/zone/uk.res +++ b/src/cobalt/content/icu/icudt56l/zone/uk.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/vi.res b/src/cobalt/content/icu/icudt56l/zone/vi.res index e1147c7..21162bc 100644 --- a/src/cobalt/content/icu/icudt56l/zone/vi.res +++ b/src/cobalt/content/icu/icudt56l/zone/vi.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh.res b/src/cobalt/content/icu/icudt56l/zone/zh.res index 1d14841..9a55369 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_CN.res b/src/cobalt/content/icu/icudt56l/zone/zh_CN.res index 73058b5..20d5db9 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_CN.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_HK.res b/src/cobalt/content/icu/icudt56l/zone/zh_HK.res index 22b133b..7da02f8 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_HK.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res index 750bf38..0b2c050 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hans.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res index c48febe..1de3818 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_CN.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res index 2d2abc8..c9a5bb5 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hans_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res index adfd75b..07262fa 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hant.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res index 49d0732..14edaca 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_HK.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res index c48febe..1de3818 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_Hant_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_SG.res b/src/cobalt/content/icu/icudt56l/zone/zh_SG.res index a92d327..bc7f82f 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_SG.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_SG.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zone/zh_TW.res b/src/cobalt/content/icu/icudt56l/zone/zh_TW.res index 001b973..6f12dcb 100644 --- a/src/cobalt/content/icu/icudt56l/zone/zh_TW.res +++ b/src/cobalt/content/icu/icudt56l/zone/zh_TW.res Binary files differ
diff --git a/src/cobalt/content/icu/icudt56l/zu.res b/src/cobalt/content/icu/icudt56l/zu.res index ea22475..1b918d8 100644 --- a/src/cobalt/content/icu/icudt56l/zu.res +++ b/src/cobalt/content/icu/icudt56l/zu.res Binary files differ
diff --git a/src/cobalt/css_parser/grammar.y b/src/cobalt/css_parser/grammar.y index 52f988e..63f869d 100644 --- a/src/cobalt/css_parser/grammar.y +++ b/src/cobalt/css_parser/grammar.y
@@ -4304,8 +4304,12 @@ // Specifies the minimum content height of boxes. // https://www.w3.org/TR/CSS21/visudet.html#propdef-min-height +// https://www.w3.org/TR/css-sizing-3/#min-size-properties min_height_property_value: - positive_length_percent_property_value + kAutoToken maybe_whitespace { + $$ = AddRef(cssom::KeywordValue::GetAuto().get()); + } + | positive_length_percent_property_value | common_values ; @@ -5736,8 +5740,12 @@ // Specifies the minimum content width of boxes. // https://www.w3.org/TR/CSS2/visudet.html#propdef-min-width +// https://www.w3.org/TR/css-sizing-3/#min-size-properties min_width_property_value: - positive_length_percent_property_value + kAutoToken maybe_whitespace { + $$ = AddRef(cssom::KeywordValue::GetAuto().get()); + } + | positive_length_percent_property_value | common_values ;
diff --git a/src/cobalt/css_parser/parser_test.cc b/src/cobalt/css_parser/parser_test.cc index db63e85..fa1511c 100644 --- a/src/cobalt/css_parser/parser_test.cc +++ b/src/cobalt/css_parser/parser_test.cc
@@ -6346,6 +6346,20 @@ EXPECT_EQ(cssom::kPixelsUnit, min_height->unit()); } +TEST_F(ParserTest, ParsesMinHeightAuto) { + // 'auto' is also the initial value for min-height in CSS3. It is set to a + // length value first, to ensure that the property does not have the initial + // value for the test. + // https://www.w3.org/TR/css-sizing-3/#min-size-properties + scoped_refptr<cssom::CSSDeclaredStyleData> style = + parser_.ParseStyleDeclarationList("min-height: 100px; min-height: auto;", + source_location_); + + ASSERT_TRUE(style->IsDeclared(cssom::kMinHeightProperty)); + EXPECT_EQ(cssom::KeywordValue::GetAuto(), + style->GetPropertyValue(cssom::kMinHeightProperty)); +} + TEST_F(ParserTest, ParsesMinWidth) { scoped_refptr<cssom::CSSDeclaredStyleData> style = parser_.ParseStyleDeclarationList("min-width: 100px;", source_location_); @@ -6359,6 +6373,20 @@ EXPECT_EQ(cssom::kPixelsUnit, min_width->unit()); } +TEST_F(ParserTest, ParsesMinWidthAuto) { + // 'auto' is also the initial value for min-width in CSS3. It is set to a + // length value first, to ensure that the property does not have the initial + // value for the test. + // https://www.w3.org/TR/css-sizing-3/#min-size-properties + scoped_refptr<cssom::CSSDeclaredStyleData> style = + parser_.ParseStyleDeclarationList("min-width: 100px; min-width: auto;", + source_location_); + + ASSERT_TRUE(style->IsDeclared(cssom::kMinWidthProperty)); + EXPECT_EQ(cssom::KeywordValue::GetAuto(), + style->GetPropertyValue(cssom::kMinWidthProperty)); +} + TEST_F(ParserTest, ParsesOpacity) { scoped_refptr<cssom::CSSDeclaredStyleData> style = parser_.ParseStyleDeclarationList("opacity: 0.5;", source_location_);
diff --git a/src/cobalt/cssom/property_definitions.cc b/src/cobalt/cssom/property_definitions.cc index f140fde..72d36ac 100644 --- a/src/cobalt/cssom/property_definitions.cc +++ b/src/cobalt/cssom/property_definitions.cc
@@ -570,18 +570,18 @@ kImpactsBoxCrossReferencesNo, KeywordValue::GetNone()); // https://www.w3.org/TR/CSS2/visudet.html#propdef-min-height + // https://www.w3.org/TR/css-sizing-3/#min-size-properties SetPropertyDefinition(kMinHeightProperty, "min-height", kInheritedNo, kAnimatableNo, kImpactsChildComputedStyleNo, kImpactsBoxGenerationNo, kImpactsBoxSizesYes, - kImpactsBoxCrossReferencesNo, - new LengthValue(0, kPixelsUnit)); + kImpactsBoxCrossReferencesNo, KeywordValue::GetAuto()); // https://www.w3.org/TR/CSS2/visudet.html#propdef-min-width + // https://www.w3.org/TR/css-sizing-3/#min-size-properties SetPropertyDefinition(kMinWidthProperty, "min-width", kInheritedNo, kAnimatableNo, kImpactsChildComputedStyleNo, kImpactsBoxGenerationNo, kImpactsBoxSizesYes, - kImpactsBoxCrossReferencesNo, - new LengthValue(0, kPixelsUnit)); + kImpactsBoxCrossReferencesNo, KeywordValue::GetAuto()); // https://www.w3.org/TR/css3-color/#opacity SetPropertyDefinition(kOpacityProperty, "opacity", kInheritedNo,
diff --git a/src/cobalt/debug/backend/content/css_agent.js b/src/cobalt/debug/backend/content/css_agent.js index 7745a6c..e7747b6 100644 --- a/src/cobalt/debug/backend/content/css_agent.js +++ b/src/cobalt/debug/backend/content/css_agent.js
@@ -131,13 +131,5 @@ this.matchedCSSRules = _matchedRules(node); } -// Polyfill Element.matches() -// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches -Element.prototype.matches = Element.prototype.matches || function(s) { - var matches = document.querySelectorAll(s), i = matches.length; - while (--i >= 0 && matches.item(i) != this) {} - return i > -1; -}; - // TODO: Pass debugBackend from C++ instead of getting it from the window. })(window.debugBackend);
diff --git a/src/cobalt/debug/backend/content/runtime_agent.js b/src/cobalt/debug/backend/content/runtime_agent.js new file mode 100644 index 0000000..f426e65 --- /dev/null +++ b/src/cobalt/debug/backend/content/runtime_agent.js
@@ -0,0 +1,473 @@ +// Copyright 2016 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This implementation of the "Runtime" Devtools protocol domain is only used +// for mozjs. When using V8, we use the built-in inspector backend which +// implements this for us. + +(function(debugBackend) { + +// Attach methods to handle commands in the 'Runtime' devtools domain. +// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime +var commands = debugBackend.Runtime = {}; + +// Calls a function on a previously accessed RemoteObject with an argument list +// and returns a new RemoteObject. Used extensively by devtools for +// auto-completion. The new RemoteObject uses the same |objectGroup| as the +// original object. +// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-callFunctionOn +commands.callFunctionOn = function(params) { + var result = {}; + var value = null; + try { + eval('var f = ' + params.functionDeclaration); + var objectEntry = _objectStore[params.objectId]; + var thisArg = objectEntry.object; + var objectGroup = objectEntry.objectGroup; + value = f.apply(thisArg, params.arguments); + result.wasThrown = false; + } catch(e) { + value = e; + result.exceptionDetails = e; + result.wasThrown = true; + } + + result.result = + new devtools.RemoteObject(value, objectGroup, params.returnByValue); + return JSON.stringify(result); +} + +// Evaluates a string and returns a RemoteObject. +// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-evaluate +commands.evaluate = function(params) { + var result = {}; + var value = null; + try { + if (params.includeCommandLineAPI) { + _addCommandLineAPI(); + } + + // Use |eval| indirectly, to cause evaluation at global scope. + // This is so subsequent calls can access variables declared here, etc. + var geval = eval; + value = geval(params.expression); + + // Store the last result if we're doing a "real" evaluation, not an + // auto-complete. Seems a little special case-y, but this is taken from + // Chrome's implementation, and looks like the only way to differentiate. + if (params.objectGroup == 'console') { + _lastResult = value; + } + + result.wasThrown = false; + } catch(e) { + value = e; + result.exceptionDetails = e; + result.wasThrown = true; + } + + // Create the RemoteObject corresponding to the result. + result.result = + new devtools.RemoteObject(value, params.objectGroup, params.returnByValue); + + // Add the preview, if requested. + if (params.generatePreview) { + var preview = _generatePreview(value); + if (preview) { + result.result.preview = preview; + } + } + + if (params.includeCommandLineAPI) { + _removeCommandLineAPI(); + } + + return JSON.stringify(result); +} + +// Returns all let, const and class variables from global scope. +// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-globalLexicalScopeNames +commands.globalLexicalScopeNames = function(params) { + var result = []; + // TODO: Get the globals. + return JSON.stringify(result); +} + +// Returns the properties of a previously accessed object as an array of +// PropertyDescriptor objects. +// The parameters specifify several options: +// * ownProperties - only include immediate properties, not the prototype chain. +// * accessorPropertiesOnly - only include accessor properties. +// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-getProperties +commands.getProperties = function(params) { + var result = {}; + var properties = []; + try { + var objectEntry = _objectStore[params.objectId]; + var object = objectEntry.object; + var objectGroup = objectEntry.objectGroup; + _addProperties(object, objectGroup, !params.ownProperties, properties); + + if (params.accessorPropertiesOnly) { + properties = properties.filter(function(element, index, array) { + return (element.get || element.set); + }); + } + result.wasThrown = false; + } catch(e) { + value = e; + result.exceptionDetails = e; + result.wasThrown = true; + } + + result.result = properties; + return JSON.stringify(result); +} + +// Releases our reference to a previously accessed object. +// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-releaseObject +commands.releaseObject = function(params) { + delete _objectStore[params.objectId]; +} + +// Releases our references to a group of previously accessed objects. +// https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#method-releaseObjectGroup +commands.releaseObjectGroup = function(params) { + for (var objectId in _objectStore) { + var objectEntry = _objectStore[objectId]; + if (objectEntry && objectEntry.objectGroup == params.objectGroup) { + delete _objectStore[objectId]; + } + } +} + +// Adds the properties of |object| to the |result| array as new +// PropertyDescriptor objects. Some properties may be objects themselves, +// in which case new RemoteObjects are created using the specified +// |objectGroup|, which should be that of |object|. +// If |includePrototype| is set, the function will be called recursively on +// the prototype chain of the object. +var _addProperties = function(object, objectGroup, includePrototype, result) { + var properties = Object.getOwnPropertyNames(object); + var foundProto = false; + for (var i = 0; i < properties.length; i++) { + var key = properties[i]; + foundProto = foundProto || (key == '__proto__'); + + // If we can't find the property, and its name corresponds to a number, + // try it as an array index (integer instead of string). + if (object[key] == null) { + if (!isNaN(key)) { + key = parseInt(key); + } else { + continue; + } + } + + var propertyDescriptor = + new devtools.PropertyDescriptor(object, objectGroup, key); + result.push(propertyDescriptor); + } + + var proto = null; + try { + proto = Object.getPrototypeOf(object); + } catch (e) {} + + if (includePrototype) { + // Recursively add the properties from the prototype chain. + if (proto) { + _addProperties(proto, objectGroup, includePrototype, result); + } + } else if (proto && !foundProto) { + // |getOwnPropertyNames| may not include the object prototype, + // so if that's the case, add it now. It's a deprecated name, but devtools + // still uses it. + var propertyDescriptor = + new devtools.PropertyDescriptor(object, objectGroup, '__proto__'); + result.push(propertyDescriptor); + } +} + +// Gets an object from the internal object store. +var _getObject = function(objectId) { + return _objectStore[objectId].object; +} + +// Adds an object to the internal object store and returns a unique id that can +// be used to access it again. +var _addObject = function(object, objectGroup) { + // If we've already added this object, then use the same objectId. + for (var objectId in _objectStore) { + var objectEntry = _objectStore[objectId]; + if (objectEntry.object === object && + objectEntry.objectGroup == objectGroup) { + return objectId; + } + } + + var objectId = _nextObjectId.toString(); + _nextObjectId += 1; + _objectStore[objectId] = {}; + _objectStore[objectId].object = object; + _objectStore[objectId].objectGroup = objectGroup; + return objectId; +} + +// Generates an object preview, which may be requested for the evaluate +// command. +var _generatePreview = function(object) { + if (!object || (typeof object != 'object')) { + return null; + } else { + return new devtools.ObjectPreview(object); + } +} + +// Returns the subtype of an object, or null if the specified value is not an +// object. +var _getSubtype = function(object) { + if (typeof object == 'object') { + if (object instanceof Array) { + return 'array'; + } else if (object instanceof Date) { + return 'date'; + } else if (object instanceof Error) { + return 'error'; + } else if (object instanceof Node) { + return 'node'; + } else if (object instanceof RegExp) { + return 'regexp'; + } + } + return null; +} + +// Tries to get the classname of an object by following the prototype chain +// and looking for a constructor. +var _getClassName = function(object) { + try { + for (var obj = object; obj && !this.className; + obj = Object.getPrototypeOf(obj)) { + if (obj.constructor) { + return obj.constructor.name; + } + } + } catch(e) {} + + return null; +} + +// Namespace for constructors of types defined in the Devtools protocol. +var devtools = {}; + +// Creates a RemoteObject, which is the type used to return many values to +// devtools. If |value| is an object, then is it inserted into |_objectStore| +// and the |objectId| key used to access it is included in the RemoteObject. If +// |value| is not an object, or |returnByValue| is true, then |value| is +// directly included in the RemoteObject. +devtools.RemoteObject = function(value, objectGroup, returnByValue) { + this.type = typeof value; + + if (value == null) { + this.subtype == 'null'; + this.value = null; + return; + } + + if (this.type == 'object') { + this.objectId = _addObject(value, objectGroup); + this.subtype = _getSubtype(value); + this.className = _getClassName(value); + } + + // Fill in the description field. Devtools will only display arrays correctly + // if their description follows a particular format. For other values, try to + // use the generic string conversion, and fall back to the className if that + // fails. + if (this.subtype == 'array') { + this.description = 'Array[' + value.length + ']'; + } else { + try { + this.description = value.toString(); + } catch(e) { + this.description = this.className; + } + } + + if (returnByValue || this.type != 'object') { + this.value = value; + } +} + +// Creates a PropertyDescriptor for |property| of |object|, which is the type +// used to return object properties to devtools. Some properties may be objects, +// in which case new RemoteObjects are created and inserted into |_objectStore| +// using the specified |objectGroup|, which should be that of |object|. +devtools.PropertyDescriptor = function(object, objectGroup, property) { + this.name = property.toString(); + var descriptor = Object.getOwnPropertyDescriptor(object, property); + // Some Cobalt objects don't seem to support |getOwnPropertyDescriptor|, + // so we handle that case in the else clause below. + if (descriptor) { + this.configurable = descriptor.configurable; + this.enumerable = descriptor.enumerable; + if (descriptor.get) { + this.get = new devtools.RemoteObject(descriptor.get, objectGroup, false); + } + if (descriptor.set) { + this.set = new devtools.RemoteObject(descriptor.set, objectGroup, false); + } + if (descriptor.value != null) { + this.value = + new devtools.RemoteObject(descriptor.value, objectGroup, false); + } + this.writable = descriptor.writable; + } else if (object[property] != null) { + this.configurable = false; + this.enumerable = object.propertyIsEnumerable(property); + if (object.__lookupGetter__(property)) { + this.get = object.__lookupGetter__(property); + } + if (object.__lookupSetter__(property)) { + this.set = object.__lookupSetter__(property); + } + this.value = + new devtools.RemoteObject(object[property], objectGroup, false); + } +} + +// Creates an ObjectPreview, the type to represent a preview of an object, +// which may be requested by devtools in the evaluate command. +devtools.ObjectPreview = function(value) { + this.type = typeof value; + this.subtype = _getSubtype(value); + this.lossless = true; + this.overflow = false; + this.properties = []; + + // Use the className as the preview description. This matches Chrome. + this.description = _getClassName(value); + + // If we have an array-like object, add the array items, or append the + // length to the description if there's too many. + if (value.length != null) { + var MAX_ARRAY_ITEMS = 99; + if (value.length <= MAX_ARRAY_ITEMS) { + for (var i = 0; i < value.length; i++) { + var property = new devtools.PropertyPreview(i, value[i]); + this.properties.push(property); + if (typeof value[i] == 'object') { + this.lossless = false; + } + } + } else { + this.description += '[' + value.length + ']'; + this.lossless = false; + this.overflow = true; + } + return; + } + + // Add object properties, up to a maximum. + var MAX_PROPERTIES = 5; + var numProperties = 0; + for (var name in value) { + if (value[name] != null) { + if (++numProperties > MAX_PROPERTIES) { + this.lossless = false; + this.overflow = true; + break; + } + if (typeof property == 'object') { + this.lossless = false; + } + var property = new devtools.PropertyPreview(name, value[name]); + this.properties.push(property); + } + } +} + +// Creates a PropertyPreview, the type to represent a preview of a single +// object property. +devtools.PropertyPreview = function(name, value) { + this.name = name.toString(); + this.type = typeof value; + + try { + this.value = value.toString(); + } catch(e) {} + + if (this.type == 'object') { + this.subtype = _getSubtype(value); + } +} + +// The object store used to reference objects by internally generated id. +var _objectStore = {}; +var _nextObjectId = 0; + +// The last evaluated result. +var _lastResult = null; + +// Values in the global scope that have been overridden by corresponding +// members of the Command Line API for the duration of an evaluation. We use +// this to restore the original values after the evaluation. +var _globalOverrides = {}; + +// Command Line API implementation. +// This is a set of convenience variables/functions that are not present in +// the global scope by default, but can be specified as available to the +// Runtime.evaluate function by the includeCommandLineAPI parameter. +// https://developers.google.com/web/tools/chrome-devtools/console/utilities +var _commandLineAPI = {}; + +_commandLineAPI.$_ = _lastResult; + +_commandLineAPI.$ = document.querySelector.bind(document); + +_commandLineAPI.$$ = document.querySelectorAll.bind(document); + +_commandLineAPI.keys = Object.keys; + +_commandLineAPI.values = function(object) { + var keys = Object.keys(object); + var result = []; + for (var i = 0; i < keys.length; i++) { + result.push(object[keys[i]]); + } + return result; +} + +var _addCommandLineAPI = function() { + _commandLineAPI.$_ = _lastResult; + for (var property in _commandLineAPI) { + if (_commandLineAPI.hasOwnProperty(property)) { + _globalOverrides[property] = window[property]; + window[property] = _commandLineAPI[property]; + } + } +} + +var _removeCommandLineAPI = function() { + for (var property in _globalOverrides) { + if (_globalOverrides.hasOwnProperty(property)) { + window[property] = _globalOverrides[property]; + delete _globalOverrides[property]; + } + } +} + +// TODO: Pass debugBackend from C++ instead of getting it from the window. +})(window.debugBackend);
diff --git a/src/cobalt/debug/backend/debug_module.cc b/src/cobalt/debug/backend/debug_module.cc index 1b82307..e1849a9 100644 --- a/src/cobalt/debug/backend/debug_module.cc +++ b/src/cobalt/debug/backend/debug_module.cc
@@ -12,10 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include <memory> - #include "cobalt/debug/backend/debug_module.h" +#include <memory> + #include "cobalt/debug/backend/render_layer.h" namespace cobalt { @@ -24,6 +24,7 @@ namespace { constexpr char kScriptDebuggerAgent[] = "ScriptDebuggerAgent"; +constexpr char kRuntimeAgent[] = "RuntimeAgent"; constexpr char kConsoleAgent[] = "ConsoleAgent"; constexpr char kLogAgent[] = "LogAgent"; constexpr char kDomAgent[] = "DomAgent"; @@ -154,6 +155,10 @@ // directly handle one or more protocol domains. script_debugger_agent_.reset( new ScriptDebuggerAgent(debug_dispatcher_.get(), script_debugger_.get())); + if (!script_debugger_agent_->IsSupportedDomain("Runtime")) { + runtime_agent_.reset( + new RuntimeAgent(debug_dispatcher_.get(), data.window)); + } console_agent_.reset(new ConsoleAgent(debug_dispatcher_.get(), data.console)); log_agent_.reset(new LogAgent(debug_dispatcher_.get())); dom_agent_.reset( @@ -183,6 +188,9 @@ : data.debugger_state->agents_state.get(); script_debugger_agent_->Thaw( RemoveAgentState(kScriptDebuggerAgent, agents_state)); + if (runtime_agent_) { + runtime_agent_->Thaw(RemoveAgentState(kRuntimeAgent, agents_state)); + } console_agent_->Thaw(RemoveAgentState(kConsoleAgent, agents_state)); log_agent_->Thaw(RemoveAgentState(kLogAgent, agents_state)); dom_agent_->Thaw(RemoveAgentState(kDomAgent, agents_state)); @@ -207,6 +215,9 @@ base::DictionaryValue* agents_state = debugger_state->agents_state.get(); StoreAgentState(agents_state, kScriptDebuggerAgent, script_debugger_agent_->Freeze()); + if (runtime_agent_) { + StoreAgentState(agents_state, kRuntimeAgent, runtime_agent_->Freeze()); + } StoreAgentState(agents_state, kConsoleAgent, console_agent_->Freeze()); StoreAgentState(agents_state, kLogAgent, log_agent_->Freeze()); StoreAgentState(agents_state, kDomAgent, dom_agent_->Freeze());
diff --git a/src/cobalt/debug/backend/debug_module.h b/src/cobalt/debug/backend/debug_module.h index 6abfa5c..ccf942c 100644 --- a/src/cobalt/debug/backend/debug_module.h +++ b/src/cobalt/debug/backend/debug_module.h
@@ -29,6 +29,7 @@ #include "cobalt/debug/backend/log_agent.h" #include "cobalt/debug/backend/page_agent.h" #include "cobalt/debug/backend/render_overlay.h" +#include "cobalt/debug/backend/runtime_agent.h" #include "cobalt/debug/backend/script_debugger_agent.h" #include "cobalt/debug/backend/tracing_agent.h" #include "cobalt/debug/json_object.h" @@ -140,6 +141,7 @@ std::unique_ptr<DOMAgent> dom_agent_; scoped_refptr<CSSAgent> css_agent_; std::unique_ptr<PageAgent> page_agent_; + std::unique_ptr<RuntimeAgent> runtime_agent_; std::unique_ptr<ScriptDebuggerAgent> script_debugger_agent_; std::unique_ptr<TracingAgent> tracing_agent_; };
diff --git a/src/cobalt/debug/backend/runtime_agent.cc b/src/cobalt/debug/backend/runtime_agent.cc new file mode 100644 index 0000000..70c7acb --- /dev/null +++ b/src/cobalt/debug/backend/runtime_agent.cc
@@ -0,0 +1,90 @@ +// Copyright 2016 The Cobalt Authors. All Rights Reserved. +// +// 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 "cobalt/debug/backend/runtime_agent.h" + +#include <string> + +#include "base/bind.h" + +namespace cobalt { +namespace debug { +namespace backend { + +namespace { +// Definitions from the set specified here: +// https://chromedevtools.github.io/devtools-protocol/tot/Runtime +constexpr char kInspectorDomain[] = "Runtime"; + +// File to load JavaScript runtime implementation from. +constexpr char kScriptFile[] = "runtime_agent.js"; +} // namespace + +RuntimeAgent::RuntimeAgent(DebugDispatcher* dispatcher, dom::Window* window) + : dispatcher_(dispatcher), + window_(window), + ALLOW_THIS_IN_INITIALIZER_LIST(commands_(this, kInspectorDomain)) { + DCHECK(dispatcher_); + if (!dispatcher_->RunScriptFile(kScriptFile)) { + DLOG(WARNING) << "Cannot execute Runtime initialization script."; + } + + commands_["enable"] = &RuntimeAgent::Enable; + commands_["disable"] = &RuntimeAgent::Disable; + commands_["compileScript"] = &RuntimeAgent::CompileScript; +} + +void RuntimeAgent::Thaw(JSONObject agent_state) { + dispatcher_->AddDomain(kInspectorDomain, commands_.Bind()); + script_loaded_ = dispatcher_->RunScriptFile(kScriptFile); + DLOG_IF(ERROR, !script_loaded_) << "Failed to load " << kScriptFile; +} + +JSONObject RuntimeAgent::Freeze() { + dispatcher_->RemoveDomain(kInspectorDomain); + return JSONObject(); +} + +void RuntimeAgent::Enable(const Command& command) { + if (!script_loaded_) { + command.SendErrorResponse(Command::kInternalError, + "Cannot create Runtime inspector."); + return; + } + + // Send an executionContextCreated event. + // https://chromedevtools.github.io/devtools-protocol/1-3/Runtime#event-executionContextCreated + JSONObject params(new base::DictionaryValue()); + params->SetInteger("context.id", 1); + params->SetString("context.origin", window_->location()->origin()); + params->SetString("context.name", "Cobalt"); + params->SetBoolean("context.auxData.isDefault", true); + dispatcher_->SendEvent( + std::string(kInspectorDomain) + ".executionContextCreated", params); + + command.SendResponse(); +} + +void RuntimeAgent::Disable(const Command& command) { command.SendResponse(); } + +void RuntimeAgent::CompileScript(const Command& command) { + // TODO: Parse the JS without eval-ing it... This is to support: + // a) Multi-line input from the devtools console + // b) https://developers.google.com/web/tools/chrome-devtools/snippets + command.SendResponse(); +} + +} // namespace backend +} // namespace debug +} // namespace cobalt
diff --git a/src/cobalt/debug/backend/runtime_agent.h b/src/cobalt/debug/backend/runtime_agent.h new file mode 100644 index 0000000..3be3f37 --- /dev/null +++ b/src/cobalt/debug/backend/runtime_agent.h
@@ -0,0 +1,58 @@ +// Copyright 2016 The Cobalt Authors. All Rights Reserved. +// +// 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. + +#ifndef COBALT_DEBUG_BACKEND_RUNTIME_AGENT_H_ +#define COBALT_DEBUG_BACKEND_RUNTIME_AGENT_H_ + +#include "cobalt/debug/backend/command_map.h" +#include "cobalt/debug/backend/debug_dispatcher.h" +#include "cobalt/debug/command.h" +#include "cobalt/debug/json_object.h" +#include "cobalt/dom/window.h" + +namespace cobalt { +namespace debug { +namespace backend { + +// Implements a small part of the the "Runtime" inspector protocol domain with +// just enough to support console input. When using the V8 JavaScript engine, +// this class is not needed since the V8 inspector implements the Runtime domain +// for us. +class RuntimeAgent { + public: + RuntimeAgent(DebugDispatcher* dispatcher, dom::Window* window); + + void Thaw(JSONObject agent_state); + JSONObject Freeze(); + + private: + void CompileScript(const Command& command); + void Disable(const Command& command); + void Enable(const Command& command); + + DebugDispatcher* dispatcher_; + dom::Window* window_; + + // Map of member functions implementing commands. + CommandMap<RuntimeAgent> commands_; + + // Whether we successfully loaded the agent's JavaScript implementation. + bool script_loaded_ = false; +}; + +} // namespace backend +} // namespace debug +} // namespace cobalt + +#endif // COBALT_DEBUG_BACKEND_RUNTIME_AGENT_H_
diff --git a/src/cobalt/debug/debug.gyp b/src/cobalt/debug/debug.gyp index c4d50ff..a59acd7 100644 --- a/src/cobalt/debug/debug.gyp +++ b/src/cobalt/debug/debug.gyp
@@ -44,6 +44,8 @@ 'backend/render_layer.h', 'backend/render_overlay.cc', 'backend/render_overlay.h', + 'backend/runtime_agent.cc', + 'backend/runtime_agent.h', 'backend/script_debugger_agent.cc', 'backend/script_debugger_agent.h', 'backend/tracing_agent.cc',
diff --git a/src/cobalt/doc/device_authentication.md b/src/cobalt/doc/device_authentication.md new file mode 100644 index 0000000..d121237 --- /dev/null +++ b/src/cobalt/doc/device_authentication.md
@@ -0,0 +1,47 @@ +# Device Authentication + +Starting in Cobalt 20, initial URL requests will now have query parameters +appended to them signed by the platform's secret key, provided to them during +the certification process. The key must be stored in secure storage on the +device. + +## Message + +When constructing the URL for the initial browse request, according to the +logic in +[cobalt/browser/device_authentication.cc](../browser/device_authentication.cc), +it will fetch from the platform a "certification scope" string provided to +the device during certification. The certification scope will be queried +by a call to `SbSystemGetProperty(kSbSystemPropertyCertificationScope, ...)`, +which the platform is expected to implement. Along with the current system +time, this forms the message that must be signed by the device's secret key. + +## Signing + +The message defined above must be signed with the HMAC-SHA256 algorithm. The +resulting digest (encoded as base64), alongside the unencrypted message +contents, will be appended to the initial URL. + +Two choices exists for how platforms can expose the secret key to Cobalt. +Cobalt will first attempt to have the platform sign the message, and if that +functionality is not implemented Cobalt will query the platform for the secret +key and sign the message itself. If neither choice is implemented, then Cobalt +will log a warning and not append anything to the URL. + +### Platform signing + +Cobalt will first attempt to use the `SbSystemSignWithCertificationSecretKey()` +function to sign the message using the secret key. This method is preferred +since it enables implementations where the key exists only in secure hardware +and never enters the system's main memory. A reference implementation, which +depends on BoringSSL exists at +[starboard/linux/x64x11/internal/system_sign_with_certification_secret_key.cc](../../starboard/linux/x64x11/internal/system_sign_with_certification_secret_key.cc). + +### Cobalt signing + +If the function `SbSystemSignWithCertificationSecretKey()` is unimplemented (e.g. it returns `false`, as is done in +[starboard/shared/stub/system_sign_with_certification_secret_key.cc](../../starboard/shared/stub/system_sign_with_certification_secret_key.cc)), +then Cobalt will instead attempt to retrieve the secret key from the system by +a call to +`SbSystemGetProperty(kSbSystemPropertyBase64EncodedCertificationSecret, ...)`, +and use it to produce the HMAC-SHA256 digest of the message itself.
diff --git a/src/cobalt/doc/performance_tuning.md b/src/cobalt/doc/performance_tuning.md index 5a7abab..e6d9994 100644 --- a/src/cobalt/doc/performance_tuning.md +++ b/src/cobalt/doc/performance_tuning.md
@@ -408,11 +408,12 @@ 1. The command line option, "--timed_trace=XX" will instruct Cobalt to trace upon startup, for XX seconds (e.g. "--timed_trace=25"). When completed, the output will be written to the file `timed_trace.json`. -2. Using the debug console (hit CTRL+O on a keyboard once or twice), type in the - command "d.trace()" and hit enter. Cobalt will begin a trace. After - some time has passed (and presumably you have performed some actions), you - can open the debug console again and type "d.trace()" again to end the trace. - The trace output will be written to the file `triggered_trace.json`. +2. Using the debug console (hit CTRL+O on a keyboard once or twice), type in + the command "h5vcc.traceEvent.start()" and hit enter. Cobalt will begin a + trace. After some time has passed (and presumably you have performed some + actions), you can open the debug console again and type + "h5vcc.traceEvent.stop()" again to end the trace. + The trace output will be written to the file `h5vcc_trace_event.json`. The directory the output files will be placed within is the directory that the Starboard function `SbSystemGetPath()` returns with a `path_id` of
diff --git a/src/cobalt/doc/web_debugging.md b/src/cobalt/doc/web_debugging.md new file mode 100644 index 0000000..ca1d90d --- /dev/null +++ b/src/cobalt/doc/web_debugging.md
@@ -0,0 +1,176 @@ +# Cobalt Web Debugging + +## Overview + +Cobalt includes the [Chrome +DevTools](https://developers.google.com/web/tools/chrome-devtools/) frontend for +debugging web apps. It's available in the **20.lts.1+** and newer branches of +Cobalt. + +Cobalt only supports a subset of what DevTools can do, but we make a point of +hiding UI elements that don't work so everything you see in the UI should work. +As we get more implemented in the backend the respective UI will be enabled in +the frontend. + +The following panels are supported: + +* **Elements** - view the DOM tree and CSS styles +* **Console** - JavaScript "command line" and logging output +* **Sources** - interactive JavaScript debugging +* **Performance** - profile JavaScript execution + +> Cobalt DevTools relies heavily on V8 for its backend implementation. When +> Cobalt is built with MozJs only basic Elements and Console functionality is +> supported, but the UI remains the same as when building with V8 and some +> things don't work. + +## Using DevTools + +The DevTools frontend is loaded in Chrome from a small HTTP server built into +**non-gold** Cobalt. Even though it looks mostly the same as Chrome's inspector +(it's built from the same source code), Cobalt's DevTools is a separate app, +and Cobalt is *not* a remote target that you can debug with Chrome's built-in +debugger. + +After building and running Cobalt as usual, use Chrome on your desktop to load +the start page from port 9222 on the target device where Cobalt is running. +Click through to the only inspectable page shown on the start page. + +> If you have trouble connecting: +> * Ensure you have an IP route from your desktop to the target device that +> allows traffic on the debugging port (default 9222). +> * If both IPv4 andIPv6 networks are available, the debug server will prefer to +> bind to the IPv4 network interface. +> * If you are running Cobalt locally on your desktop, then use your actual IP +> address (not localhost nor 127.0.0.1). + +If you're not sure what IP address to use, look in the terminal log output for a +message telling you the URL of Cobalt's DevTools (which you may be able to open +with a ctrl-click in many terminal programs): + +``` +--------------------------------- + Connect to the web debugger at: + http://192.168.1.1:9222 +--------------------------------- +``` + +### Wait for web debugger + +If you're debugging the initial page as it's loading you need use the +`--wait_for_web_debugger` switch to tell Cobalt to wait until you attach +DevTools before actually loading the initial URL: + +``` +out/linux-x64x11_devel/cobalt --wait_for_web_debugger --url="http://test.example.com" +``` + +When this switch is specified, Cobalt will appear to hang with just a black +window until you load DevTools. In the terminal log output you'll see that +Cobalt is waiting with message like: + +``` +------------------------------------- + Waiting for web debugger to connect +------------------------------------- +``` + +If you're debugging a page in a series of redirects, you can specify a number to +make Cobalt wait before loading the Nth page. If no number is specified with the +switch, the default value is 1 to wait before the initial page load. For +example: + +``` +out/linux-x64x11_devel/cobalt --wait_for_web_debugger=2 --url="http://test.example.com" +``` + +## Panels + +### Elements + +The Elements panel displays the DOM as a tree with expandable nodes to dig into +it. The right side bar shows the CSS styles affecting the selected node in the +DOM. The *Styles* tab shows matching rules, inherited rules, and inline style. +The *Computed* tab shows the computed style for the selected node. The box model +properties are shown graphically in both the *Styles* and *Computed* tabs. + +> Cobalt currently only supports a read-only view of the DOM and CSS. + +Chrome docs: + +* https://developers.google.com/web/tools/chrome-devtools/dom/ +* https://developers.google.com/web/tools/chrome-devtools/css/ + +### Console + +Cobalt has two consoles: +* Overlay console in Cobalt itself (shown with ctrl-O or F1). +* Remote console shown in a connected DevTools session. + +Both console UIs show messages logged from JavaScript (with `console.log()`, +etc.), and have a command line to evaluate arbitrary JavaScript in the context +of the page being debugged. + +The overlay console also shows non-JavaScript logging from Cobalt itself, which +is mostly interesting to Cobalt developers rather than web app developers. + +The console in DevTools is a richer UI that can show evaluated objects with an +expander so you can dig in to their properties. Logging from JavaScript with +`console.log()` can show objects and exceptions as well, in contrast to the +text-only messages shown in the console overlay. + +> There may be some things (e.g. timers) that still need to be hooked up to the +> V8 backend, so please file a bug if something isn't working as expected. + +> When built with MozJs instead of V8, the functionality of the console is +> limited to showing only text log messages. + +Chrome docs: + +* https://developers.google.com/web/tools/chrome-devtools/console/ + +### Sources + +Source-level JavaScript debugging can be done on the Sources panel. You can +inspect sources, set breakpoints, see call stacks and scoped variables, add +watch expressions, and all that good stuff. + +> Source debugging only works when Cobalt is built with V8. + +Chrome docs: + +* https://developers.google.com/web/tools/chrome-devtools/javascript/ + +### Performance + +The Performance panel allows you to record a profile of sampled call stacks +while Cobalt is running your JavaScript code. The recorded profile is displayed +in a flame chart showing the relationship and timing of function calls. + +> Performance profiling only works when Cobalt is built with V8, and the +> platform implements the `SbThreadSampler` Starboard API. + +> The profiler can't currently identify which is the main thread, but you can +> easily see it as the one with the most events. + +Chrome docs: + +* https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/ + +## Tips + +* Don't open Cobalt's console overlay before attaching the remote DevTools as + that can cause the latter not to work. + +* You can make Cobalt reload the current page by pressing F5 in the Cobalt + window, or ctrl-R in the remote DevTools. This may be useful for debugging + startup code in the web app. It may also help in case some source file is + not appearing in the DevTools Sources panel. + +* The DevTools frontend remembers your breakpoints, so if you need to restart + Cobalt completely you can just kill it with ctrl-C in the terminal where you + launched it and re-run it. Then click the *Reconnect DevTools* button shown + in the DevTools UI or refresh the page to reload the DevTools UI. + +* You can use the `--remote_debugging_port` command line switch to specify a + remote debugging port other than the default 9222.
diff --git a/src/cobalt/dom/c_val_key_list.cc b/src/cobalt/dom/c_val_key_list.cc deleted file mode 100644 index 859f662..0000000 --- a/src/cobalt/dom/c_val_key_list.cc +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright 2016 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/dom/c_val_key_list.h" - -#include <algorithm> -#include <iterator> - -namespace cobalt { -namespace dom { - -CValKeyList::CValKeyList() {} - -base::Optional<std::string> CValKeyList::Item(uint32 item) { - if (item < keys_.size()) { - return keys_[item]; - } - return base::nullopt; -} - -uint32 CValKeyList::length() { return static_cast<uint32>(keys_.size()); } - -int32 CValKeyList::IndexOf(const std::string& key) { - auto iter = std::find(keys_.begin(), keys_.end(), key); - return iter == keys_.end() - ? -1 - : static_cast<int32>(std::distance(keys_.begin(), iter)); -} - -void CValKeyList::AppendKey(const std::string& key) { keys_.push_back(key); } - -} // namespace dom -} // namespace cobalt
diff --git a/src/cobalt/dom/c_val_key_list.h b/src/cobalt/dom/c_val_key_list.h deleted file mode 100644 index 1eb3cbb..0000000 --- a/src/cobalt/dom/c_val_key_list.h +++ /dev/null
@@ -1,48 +0,0 @@ -// Copyright 2016 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_DOM_C_VAL_KEY_LIST_H_ -#define COBALT_DOM_C_VAL_KEY_LIST_H_ - -#include <string> -#include <vector> - -#include "base/optional.h" -#include "cobalt/script/wrappable.h" - -namespace cobalt { -namespace dom { - -class CValKeyList : public script::Wrappable { - public: - CValKeyList(); - - base::Optional<std::string> Item(uint32 item); - uint32 length(); - int32 IndexOf(const std::string& key); - - void AppendKey(const std::string& key); - - DEFINE_WRAPPABLE_TYPE(CValKeyList); - - private: - std::vector<std::string> keys_; - - DISALLOW_COPY_AND_ASSIGN(CValKeyList); -}; - -} // namespace dom -} // namespace cobalt - -#endif // COBALT_DOM_C_VAL_KEY_LIST_H_
diff --git a/src/cobalt/dom/c_val_view.cc b/src/cobalt/dom/c_val_view.cc index 577eecf..37c08c1 100644 --- a/src/cobalt/dom/c_val_view.cc +++ b/src/cobalt/dom/c_val_view.cc
@@ -14,23 +14,21 @@ #include "cobalt/dom/c_val_view.h" -#include <set> +#include <algorithm> #include "cobalt/base/c_val.h" +#include "cobalt/base/polymorphic_downcast.h" +#include "cobalt/dom/dom_settings.h" namespace cobalt { namespace dom { CValView::CValView() {} -scoped_refptr<CValKeyList> CValView::Keys() { - scoped_refptr<CValKeyList> key_list(new CValKeyList); - typedef std::set<std::string> CValKeySet; - CValKeySet key_set = base::CValManager::GetInstance()->GetOrderedCValNames(); - for (CValKeySet::iterator key_iter = key_set.begin(); - key_iter != key_set.end(); ++key_iter) { - key_list->AppendKey(*key_iter); - } +script::Sequence<std::string> CValView::Keys() { + auto key_set = base::CValManager::GetInstance()->GetOrderedCValNames(); + script::Sequence<std::string> key_list; + std::copy(key_set.begin(), key_set.end(), std::back_inserter(key_list)); return key_list; }
diff --git a/src/cobalt/dom/c_val_view.h b/src/cobalt/dom/c_val_view.h index cb1565b..50905ee 100644 --- a/src/cobalt/dom/c_val_view.h +++ b/src/cobalt/dom/c_val_view.h
@@ -19,8 +19,8 @@ #include "base/memory/ref_counted.h" #include "base/optional.h" -#include "cobalt/dom/c_val_key_list.h" #include "cobalt/script/wrappable.h" +#include "cobalt/script/sequence.h" namespace cobalt { namespace dom { @@ -29,7 +29,7 @@ public: CValView(); - scoped_refptr<CValKeyList> Keys(); + script::Sequence<std::string> Keys(); base::Optional<std::string> GetValue(const std::string& name); std::string GetPrettyValue(const std::string& name);
diff --git a/src/cobalt/dom/c_val_view.idl b/src/cobalt/dom/c_val_view.idl index dddb584..7dbcbc2 100644 --- a/src/cobalt/dom/c_val_view.idl +++ b/src/cobalt/dom/c_val_view.idl
@@ -14,7 +14,7 @@ // This is a non-standard API, used to access Cobalt's CVal system. interface CValView { - [NewObject] CValKeyList keys(); + [NewObject] sequence<DOMString> keys(); DOMString? getValue(DOMString name); DOMString getPrettyValue(DOMString name); };
diff --git a/src/cobalt/dom/document.cc b/src/cobalt/dom/document.cc index 09f158f..f14bfa4 100644 --- a/src/cobalt/dom/document.cc +++ b/src/cobalt/dom/document.cc
@@ -927,7 +927,7 @@ scoped_refptr<HTMLHtmlElement> current_html = html(); if (current_html) { - current_html->ClearRuleMatchingStateOnElementAndDescendants(); + current_html->ClearRuleMatchingStateOnElementAndSiblingsAndDescendants(); } is_selector_tree_dirty_ = false;
diff --git a/src/cobalt/dom/dom.gyp b/src/cobalt/dom/dom.gyp index f20646d..569d9eb 100644 --- a/src/cobalt/dom/dom.gyp +++ b/src/cobalt/dom/dom.gyp
@@ -39,8 +39,6 @@ 'blob_property_bag.h', 'buffer_source.cc', 'buffer_source.h', - 'c_val_key_list.cc', - 'c_val_key_list.h', 'c_val_view.cc', 'c_val_view.h', 'camera_3d.cc',
diff --git a/src/cobalt/dom/element.cc b/src/cobalt/dom/element.cc index 04aff96..2c576e1 100644 --- a/src/cobalt/dom/element.cc +++ b/src/cobalt/dom/element.cc
@@ -32,8 +32,10 @@ #include "cobalt/dom/html_element_context.h" #include "cobalt/dom/mutation_reporter.h" #include "cobalt/dom/named_node_map.h" +#include "cobalt/dom/node.h" #include "cobalt/dom/parser.h" #include "cobalt/dom/pointer_state.h" +#include "cobalt/dom/rule_matching.h" #include "cobalt/dom/serializer.h" #include "cobalt/dom/text.h" #include "cobalt/math/rect_f.h" @@ -106,6 +108,36 @@ return HasAttribute(name); } +bool Element::Matches(const std::string& selectors, + script::ExceptionState* exception_state) { + TRACK_MEMORY_SCOPE("DOM"); + // Referenced from: + // https://dom.spec.whatwg.org/#dom-element-matches + + // 1. Let s be the result of parse a selector from selectors. + cssom::CSSParser* css_parser = + this->node_document()->html_element_context()->css_parser(); + scoped_refptr<cssom::CSSRule> css_rule = + css_parser->ParseRule(selectors + " {}", this->GetInlineSourceLocation()); + + // 2. If s is failure, throw a "SyntaxError" DOMException. + if (!css_rule) { + DOMException::Raise(dom::DOMException::kSyntaxErr, exception_state); + return false; + } + scoped_refptr<cssom::CSSStyleRule> css_style_rule = + css_rule->AsCSSStyleRule(); + if (!css_style_rule) { + DOMException::Raise(dom::DOMException::kSyntaxErr, exception_state); + return false; + } + + // 3. Return true if the result of match a selector against an element, + // using s, element, and :scope element context object, returns success, + // and false otherwise. + return MatchRuleAndElement(css_style_rule, this); +} + scoped_refptr<NamedNodeMap> Element::attributes() { TRACK_MEMORY_SCOPE("DOM"); scoped_refptr<NamedNodeMap> named_node_map = named_node_map_.get();
diff --git a/src/cobalt/dom/element.h b/src/cobalt/dom/element.h index d37f9bc..a0c50e2 100644 --- a/src/cobalt/dom/element.h +++ b/src/cobalt/dom/element.h
@@ -99,6 +99,7 @@ const std::string& name) const; bool HasAttributeNS(const std::string& namespace_uri, const std::string& name) const; + bool Matches(const std::string& selectors,script::ExceptionState* exception_state); scoped_refptr<HTMLCollection> GetElementsByTagName( const std::string& local_name) const;
diff --git a/src/cobalt/dom/element.idl b/src/cobalt/dom/element.idl index f6a0ca4..af71ed6 100644 --- a/src/cobalt/dom/element.idl +++ b/src/cobalt/dom/element.idl
@@ -29,6 +29,7 @@ boolean hasAttribute(DOMString name); boolean hasAttributeNS(DOMString namespace_uri, DOMString localName); DOMString? getAttributeNS(DOMString namespace_uri, DOMString name); + [RaisesException] boolean matches(DOMString selectors); HTMLCollection getElementsByTagName(DOMString localName); HTMLCollection getElementsByClassName(DOMString classNames); };
diff --git a/src/cobalt/dom/element_intersection_observer_module.cc b/src/cobalt/dom/element_intersection_observer_module.cc index 01fb8a3..d7ce51b 100644 --- a/src/cobalt/dom/element_intersection_observer_module.cc +++ b/src/cobalt/dom/element_intersection_observer_module.cc
@@ -14,6 +14,8 @@ #include "cobalt/dom/element_intersection_observer_module.h" +#include <algorithm> + #include "cobalt/dom/document.h" #include "cobalt/dom/dom_rect_read_only.h" #include "cobalt/dom/element.h" @@ -29,11 +31,10 @@ void ElementIntersectionObserverModule::RegisterIntersectionObserverForRoot( IntersectionObserver* observer) { - for (auto it = root_registered_intersection_observers_.begin(); - it != root_registered_intersection_observers_.end(); ++it) { - if (*it == observer) { - return; - } + auto it = std::find(root_registered_intersection_observers_.begin(), + root_registered_intersection_observers_.end(), observer); + if (it != root_registered_intersection_observers_.end()) { + return; } root_registered_intersection_observers_.push_back( base::WrapRefCounted(observer)); @@ -50,13 +51,12 @@ void ElementIntersectionObserverModule::UnregisterIntersectionObserverForRoot( IntersectionObserver* observer) { - for (auto it = root_registered_intersection_observers_.begin(); - it != root_registered_intersection_observers_.end(); ++it) { - if (*it == observer) { - root_registered_intersection_observers_.erase(it); - InvalidateLayoutBoxesForElement(); - return; - } + auto it = std::find(root_registered_intersection_observers_.begin(), + root_registered_intersection_observers_.end(), observer); + if (it != root_registered_intersection_observers_.end()) { + root_registered_intersection_observers_.erase(it); + InvalidateLayoutBoxesForElement(); + return; } NOTREACHED() << "Did not find an intersection observer to unregister for the root."; @@ -64,11 +64,11 @@ void ElementIntersectionObserverModule::RegisterIntersectionObserverForTarget( IntersectionObserver* observer) { - for (auto it = target_registered_intersection_observers_.begin(); - it != target_registered_intersection_observers_.end(); ++it) { - if (*it == observer) { - return; - } + auto it = + std::find(target_registered_intersection_observers_.begin(), + target_registered_intersection_observers_.end(), observer); + if (it != target_registered_intersection_observers_.end()) { + return; } target_registered_intersection_observers_.push_back( base::WrapRefCounted(observer)); @@ -79,14 +79,14 @@ void ElementIntersectionObserverModule::UnregisterIntersectionObserverForTarget( IntersectionObserver* observer) { - for (auto it = target_registered_intersection_observers_.begin(); - it != target_registered_intersection_observers_.end(); ++it) { - if (*it == observer) { - target_registered_intersection_observers_.erase(it); - RemoveLayoutTargetForObserver(observer); - InvalidateLayoutBoxesForElement(); - return; - } + auto it = + std::find(target_registered_intersection_observers_.begin(), + target_registered_intersection_observers_.end(), observer); + if (it != target_registered_intersection_observers_.end()) { + target_registered_intersection_observers_.erase(it); + RemoveLayoutTargetForObserver(observer); + InvalidateLayoutBoxesForElement(); + return; } NOTREACHED() << "Did not find an intersection observer to unregister for the target.";
diff --git a/src/cobalt/dom/eme/media_key_session.cc b/src/cobalt/dom/eme/media_key_session.cc index f20e528..8cf2253 100644 --- a/src/cobalt/dom/eme/media_key_session.cc +++ b/src/cobalt/dom/eme/media_key_session.cc
@@ -41,10 +41,8 @@ : ALLOW_THIS_IN_INITIALIZER_LIST(event_queue_(this)), drm_system_(drm_system), drm_system_session_(drm_system->CreateSession( -#if SB_HAS(DRM_KEY_STATUSES) base::Bind(&MediaKeySession::OnSessionUpdateKeyStatuses, base::AsWeakPtr(this)) -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) , base::Bind(&MediaKeySession::OnSessionClosed,
diff --git a/src/cobalt/dom/html_element.cc b/src/cobalt/dom/html_element.cc index 636ef72..c52faae8 100644 --- a/src/cobalt/dom/html_element.cc +++ b/src/cobalt/dom/html_element.cc
@@ -910,6 +910,24 @@ } } +void HTMLElement::ClearRuleMatchingStateOnElementAndSiblingsAndDescendants() { + HTMLElement::ClearRuleMatchingStateOnElementAndDescendants(); + for (Element* element = previous_element_sibling(); element; + element = element->previous_element_sibling()) { + HTMLElement* html_element = element->AsHTMLElement(); + if (html_element) { + html_element->ClearRuleMatchingStateOnElementAndDescendants(); + } + } + for (Element* element = next_element_sibling(); element; + element = element->next_element_sibling()) { + HTMLElement* html_element = element->AsHTMLElement(); + if (html_element) { + html_element->ClearRuleMatchingStateOnElementAndDescendants(); + } + } +} + void HTMLElement::InvalidateMatchingRulesRecursively() { InvalidateMatchingRulesRecursivelyInternal(true /*is_initial_element*/); } @@ -1327,6 +1345,13 @@ // Set the focus item for the UI navigation system. if (ui_nav_item_ && !ui_nav_item_->IsContainer()) { + // Only navigation items attached to the root container are interactable. + // If the item is not registered with a container, then force a layout to + // connect items to their containers and eventually to the root container. + if (!ui_nav_item_->GetContainerItem()) { + // UI navigation items are updated as part of generating the render tree. + node_document()->DoSynchronousLayoutAndGetRenderTree(); + } ui_nav_item_->Focus(); } }
diff --git a/src/cobalt/dom/html_element.h b/src/cobalt/dom/html_element.h index abb2f2e..5cf5a48 100644 --- a/src/cobalt/dom/html_element.h +++ b/src/cobalt/dom/html_element.h
@@ -233,6 +233,7 @@ void ClearRuleMatchingStateOnElementAndAncestors( bool invalidate_tree_matching_rules); void ClearRuleMatchingStateOnElementAndDescendants(); + void ClearRuleMatchingStateOnElementAndSiblingsAndDescendants(); // Returns the cached matching rules of this element. cssom::RulesWithCascadePrecedence* matching_rules() {
diff --git a/src/cobalt/dom/rule_matching.cc b/src/cobalt/dom/rule_matching.cc index b38802c..c58f6e6 100644 --- a/src/cobalt/dom/rule_matching.cc +++ b/src/cobalt/dom/rule_matching.cc
@@ -356,18 +356,6 @@ return selector_matcher.element(); } -bool MatchRuleAndElement(cssom::CSSStyleRule* rule, Element* element) { - for (cssom::Selectors::const_iterator selector_iterator = - rule->selectors().begin(); - selector_iterator != rule->selectors().end(); ++selector_iterator) { - DCHECK(*selector_iterator); - if (MatchSelectorAndElement(selector_iterator->get(), element, true)) { - return true; - } - } - return false; -} - void GatherCandidateNodesFromSelectorNodesMap( cssom::SimpleSelectorType simple_selector_type, cssom::CombinatorType combinator_type, @@ -960,6 +948,18 @@ return NULL; } +bool MatchRuleAndElement(cssom::CSSStyleRule* rule, Element* element) { + for (cssom::Selectors::const_iterator selector_iterator = + rule->selectors().begin(); + selector_iterator != rule->selectors().end(); ++selector_iterator) { + DCHECK(*selector_iterator); + if (MatchSelectorAndElement(selector_iterator->get(), element, true)) { + return true; + } + } + return false; +} + scoped_refptr<NodeList> QuerySelectorAll(Node* node, const std::string& selectors, cssom::CSSParser* css_parser) {
diff --git a/src/cobalt/dom/rule_matching.h b/src/cobalt/dom/rule_matching.h index 4b53a6b..b473c27 100644 --- a/src/cobalt/dom/rule_matching.h +++ b/src/cobalt/dom/rule_matching.h
@@ -19,6 +19,7 @@ #include "base/memory/ref_counted.h" #include "cobalt/cssom/css_parser.h" +#include "cobalt/cssom/css_style_rule.h" namespace cobalt { namespace dom { @@ -48,6 +49,9 @@ const std::string& selectors, cssom::CSSParser* css_parser); +// Returns true if any of the selectors in the rule matches the given element. +bool MatchRuleAndElement(cssom::CSSStyleRule* rule, Element* element); + } // namespace dom } // namespace cobalt
diff --git a/src/cobalt/dom/rule_matching_test.cc b/src/cobalt/dom/rule_matching_test.cc index 84a5a88..18531c3 100644 --- a/src/cobalt/dom/rule_matching_test.cc +++ b/src/cobalt/dom/rule_matching_test.cc
@@ -35,12 +35,17 @@ #include "cobalt/dom/testing/stub_window.h" #include "cobalt/dom_parser/parser.h" #include "testing/gtest/include/gtest/gtest.h" +#include "cobalt/script/script_exception.h" +#include "cobalt/script/testing/mock_exception_state.h" using cobalt::cssom::ViewportSize; namespace cobalt { namespace dom { +using script::testing::MockExceptionState; +using ::testing::StrictMock; + class RuleMatchingTest : public ::testing::Test { protected: RuleMatchingTest() @@ -776,6 +781,13 @@ EXPECT_EQ(0, node_list->length()); } +TEST_F(RuleMatchingTest, ElementMatches) { + scoped_refptr<Element> root = new Element(document_, base::Token("root")); + StrictMock<MockExceptionState> exception_state; + EXPECT_TRUE(root->Matches("root", &exception_state)); + EXPECT_FALSE(root->Matches("r", &exception_state)); +} + TEST_F(RuleMatchingTest, StyleElementRemoval) { head_->set_inner_html("<style>* {}</style>"); body_->set_inner_html("<div/>");
diff --git a/src/cobalt/h5vcc/h5vcc.cc b/src/cobalt/h5vcc/h5vcc.cc index 701d785..5ba9959 100644 --- a/src/cobalt/h5vcc/h5vcc.cc +++ b/src/cobalt/h5vcc/h5vcc.cc
@@ -33,7 +33,6 @@ #if defined(COBALT_ENABLE_SSO) sso_ = new H5vccSso(); #endif - storage_ = new H5vccStorage(settings.network_module); system_ = new H5vccSystem(); trace_event_ = new H5vccTraceEvent(); } @@ -47,7 +46,6 @@ tracer->Trace(runtime_); tracer->Trace(settings_); tracer->Trace(sso_); - tracer->Trace(storage_); tracer->Trace(system_); tracer->Trace(trace_event_); }
diff --git a/src/cobalt/h5vcc/h5vcc.gyp b/src/cobalt/h5vcc/h5vcc.gyp index 18a74fe..3378152 100644 --- a/src/cobalt/h5vcc/h5vcc.gyp +++ b/src/cobalt/h5vcc/h5vcc.gyp
@@ -48,8 +48,6 @@ 'h5vcc_runtime_event_target.h', 'h5vcc_settings.cc', 'h5vcc_settings.h', - 'h5vcc_storage.cc', - 'h5vcc_storage.h', 'h5vcc_system.cc', 'h5vcc_system.h', 'h5vcc_trace_event.cc',
diff --git a/src/cobalt/h5vcc/h5vcc.h b/src/cobalt/h5vcc/h5vcc.h index d87120f..210f29e 100644 --- a/src/cobalt/h5vcc/h5vcc.h +++ b/src/cobalt/h5vcc/h5vcc.h
@@ -28,7 +28,6 @@ #include "cobalt/h5vcc/h5vcc_runtime.h" #include "cobalt/h5vcc/h5vcc_settings.h" #include "cobalt/h5vcc/h5vcc_sso.h" -#include "cobalt/h5vcc/h5vcc_storage.h" #include "cobalt/h5vcc/h5vcc_system.h" #include "cobalt/h5vcc/h5vcc_trace_event.h" #include "cobalt/script/wrappable.h" @@ -69,7 +68,6 @@ #if defined(COBALT_ENABLE_SSO) const scoped_refptr<H5vccSso>& sso() const { return sso_; } #endif - const scoped_refptr<H5vccStorage>& storage() const { return storage_; } const scoped_refptr<H5vccSystem>& system() const { return system_; } const scoped_refptr<H5vccTraceEvent>& trace_event() const { return trace_event_; @@ -87,7 +85,6 @@ scoped_refptr<H5vccRuntime> runtime_; scoped_refptr<H5vccSettings> settings_; scoped_refptr<H5vccSso> sso_; - scoped_refptr<H5vccStorage> storage_; scoped_refptr<H5vccSystem> system_; scoped_refptr<H5vccTraceEvent> trace_event_;
diff --git a/src/cobalt/h5vcc/h5vcc.idl b/src/cobalt/h5vcc/h5vcc.idl index 5155763..ed7818d 100644 --- a/src/cobalt/h5vcc/h5vcc.idl +++ b/src/cobalt/h5vcc/h5vcc.idl
@@ -18,9 +18,9 @@ // APIs which allow clients to call non-standard native functions that we // expose. // -// For example we provide a h5vcc.storage.ClearCookies(), which can empty the -// cookie jar in response to the user's request. Other H5vcc modules expose -// audio capabilities about the platform, or run an in-app DIAL server. +// For example we provide a h5vcc.accessibility.textToSpeech, which tells +// whether the platform supports text-to-speech capability. Other H5vcc +// modules can run an in-app DIAL server or expose availables CVals. // // The H5vcc node should just be a collection of readonly sub-nodes. // This is created by the BrowserModule and passed directly to the Window @@ -37,7 +37,6 @@ readonly attribute H5vccSettings settings; [Conditional=COBALT_ENABLE_SSO] readonly attribute H5vccSso sso; - readonly attribute H5vccStorage storage; readonly attribute H5vccSystem system; readonly attribute H5vccTraceEvent traceEvent; };
diff --git a/src/cobalt/h5vcc/h5vcc_accessibility.cc b/src/cobalt/h5vcc/h5vcc_accessibility.cc index 9c4a8ba..29fbc3d 100644 --- a/src/cobalt/h5vcc/h5vcc_accessibility.cc +++ b/src/cobalt/h5vcc/h5vcc_accessibility.cc
@@ -16,9 +16,6 @@ #include "base/command_line.h" #include "base/message_loop/message_loop.h" -#include "cobalt/accessibility/starboard_tts_engine.h" -#include "cobalt/accessibility/tts_engine.h" -#include "cobalt/accessibility/tts_logger.h" #include "cobalt/base/accessibility_settings_changed_event.h" #include "cobalt/browser/switches.h" #include "starboard/accessibility.h" @@ -40,20 +37,6 @@ return false; } -#if SB_HAS(SPEECH_SYNTHESIS) -bool IsTextToSpeechEnabled() { - // Check if the tts feature is enabled in Starboard. - SbAccessibilityTextToSpeechSettings tts_settings = {0}; - // Check platform settings. - if (SbAccessibilityGetTextToSpeechSettings(&tts_settings)) { - return tts_settings.has_text_to_speech_setting && - tts_settings.is_text_to_speech_enabled; - } - - return false; -} -#endif // SB_HAS(SPEECH_SYNTHESIS) - } // namespace H5vccAccessibility::H5vccAccessibility( @@ -67,26 +50,6 @@ event_dispatcher_->AddEventCallback( base::AccessibilitySettingsChangedEvent::TypeId(), on_application_event_callback_); - if (ShouldForceTextToSpeech()) { -#if SB_HAS(SPEECH_SYNTHESIS) - // Create a StarboardTTSEngine if the platform has speech synthesis. - tts_engine_.reset(new accessibility::StarboardTTSEngine()); -#else - tts_engine_.reset(new accessibility::TTSLogger()); -#endif - } - -#if SB_HAS(SPEECH_SYNTHESIS) - if (!tts_engine_ && IsTextToSpeechEnabled()) { - // Create a StarboardTTSEngine if TTS is enabled. - tts_engine_.reset(new accessibility::StarboardTTSEngine()); - } -#endif - - if (tts_engine_) { - screen_reader_.reset(new accessibility::ScreenReader( - window->document(), tts_engine_.get(), mutation_observer_task_manager)); - } } H5vccAccessibility::~H5vccAccessibility() { @@ -95,16 +58,12 @@ on_application_event_callback_); } -bool H5vccAccessibility::built_in_screen_reader() const { - return screen_reader_ && screen_reader_->enabled(); -} +bool H5vccAccessibility::built_in_screen_reader() const { return false; } void H5vccAccessibility::set_built_in_screen_reader(bool value) { - if (!screen_reader_) { + if (value) { LOG(WARNING) << "h5vcc.accessibility.builtInScreenReader: not available"; - return; } - screen_reader_->set_enabled(value); } bool H5vccAccessibility::high_contrast_text() const {
diff --git a/src/cobalt/h5vcc/h5vcc_accessibility.h b/src/cobalt/h5vcc/h5vcc_accessibility.h index a3cc95f..f3b5c45 100644 --- a/src/cobalt/h5vcc/h5vcc_accessibility.h +++ b/src/cobalt/h5vcc/h5vcc_accessibility.h
@@ -18,8 +18,6 @@ #include <memory> #include "base/message_loop/message_loop.h" -#include "cobalt/accessibility/screen_reader.h" -#include "cobalt/accessibility/tts_engine.h" #include "cobalt/base/event_dispatcher.h" #include "cobalt/dom/window.h" #include "cobalt/script/callback_function.h" @@ -65,8 +63,6 @@ base::EventDispatcher* event_dispatcher_; std::unique_ptr<H5vccAccessibilityCallbackReference> high_contrast_text_listener_; - std::unique_ptr<accessibility::TTSEngine> tts_engine_; - std::unique_ptr<accessibility::ScreenReader> screen_reader_; DISALLOW_COPY_AND_ASSIGN(H5vccAccessibility); };
diff --git a/src/cobalt/h5vcc/h5vcc_storage.cc b/src/cobalt/h5vcc/h5vcc_storage.cc deleted file mode 100644 index 8bc8c5d..0000000 --- a/src/cobalt/h5vcc/h5vcc_storage.cc +++ /dev/null
@@ -1,54 +0,0 @@ -// Copyright 2015 The Cobalt Authors. All Rights Reserved. -// -// 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 "cobalt/h5vcc/h5vcc_storage.h" - -#include "cobalt/storage/storage_manager.h" -#include "net/url_request/url_request_context.h" - -namespace cobalt { -namespace h5vcc { - -H5vccStorage::H5vccStorage(network::NetworkModule* network_module) - : network_module_(network_module) {} - -void H5vccStorage::ClearCookies() { - net::CookieStore* cookie_store = - network_module_->url_request_context()->cookie_store(); - auto* cookie_monster = static_cast<net::CookieMonster*>(cookie_store); - network_module_->task_runner()->PostBlockingTask( - FROM_HERE, - base::Bind(&net::CookieMonster::DeleteAllMatchingInfoAsync, - base::Unretained(cookie_monster), net::CookieDeletionInfo(), - base::Passed(net::CookieStore::DeleteCallback()))); -} - -void H5vccStorage::Flush(const base::Optional<bool>& sync) { - if (sync.value_or(false) == true) { - DLOG(WARNING) << "Synchronous flush is not supported."; - } - - network_module_->storage_manager()->FlushNow(base::Closure()); -} - -bool H5vccStorage::GetCookiesEnabled() { - return network_module_->network_delegate()->cookies_enabled(); -} - -void H5vccStorage::SetCookiesEnabled(bool enabled) { - network_module_->network_delegate()->set_cookies_enabled(enabled); -} - -} // namespace h5vcc -} // namespace cobalt
diff --git a/src/cobalt/h5vcc/h5vcc_storage.h b/src/cobalt/h5vcc/h5vcc_storage.h deleted file mode 100644 index 613f024..0000000 --- a/src/cobalt/h5vcc/h5vcc_storage.h +++ /dev/null
@@ -1,44 +0,0 @@ -// Copyright 2015 The Cobalt Authors. All Rights Reserved. -// -// 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. - -#ifndef COBALT_H5VCC_H5VCC_STORAGE_H_ -#define COBALT_H5VCC_H5VCC_STORAGE_H_ - -#include "base/optional.h" -#include "cobalt/network/network_module.h" -#include "cobalt/script/wrappable.h" - -namespace cobalt { -namespace h5vcc { - -class H5vccStorage : public script::Wrappable { - public: - explicit H5vccStorage(network::NetworkModule* network_module); - void ClearCookies(); - void Flush(const base::Optional<bool>& sync); - bool GetCookiesEnabled(); - void SetCookiesEnabled(bool enabled); - - DEFINE_WRAPPABLE_TYPE(H5vccStorage); - - private: - network::NetworkModule* network_module_; - - DISALLOW_COPY_AND_ASSIGN(H5vccStorage); -}; - -} // namespace h5vcc -} // namespace cobalt - -#endif // COBALT_H5VCC_H5VCC_STORAGE_H_
diff --git a/src/cobalt/h5vcc/h5vcc_storage.idl b/src/cobalt/h5vcc/h5vcc_storage.idl deleted file mode 100644 index 7a30dec..0000000 --- a/src/cobalt/h5vcc/h5vcc_storage.idl +++ /dev/null
@@ -1,21 +0,0 @@ -// Copyright 2015 The Cobalt Authors. All Rights Reserved. -// -// 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. - -interface H5vccStorage { - void clearCookies(); - // We don't support synchronous flush, this is legacy. - void flush(optional boolean sync = false); - boolean getCookiesEnabled(); - void setCookiesEnabled(boolean value); -};
diff --git a/src/cobalt/layout/block_container_box.cc b/src/cobalt/layout/block_container_box.cc index c3076e4..006baff 100644 --- a/src/cobalt/layout/block_container_box.cc +++ b/src/cobalt/layout/block_container_box.cc
@@ -207,15 +207,15 @@ // computed value for 'width'. // https://www.w3.org/TR/CSS21/visudet.html#min-max-widths bool min_width_depends_on_containing_block; - base::Optional<LayoutUnit> min_width = - GetUsedMinWidth(computed_style(), layout_params.containing_block_size, - &min_width_depends_on_containing_block); - if (width() < min_width.value()) { - UpdateContentWidthAndMargins(layout_params.containing_block_size.width(), - layout_params.shrink_to_fit_width_forced, - min_width_depends_on_containing_block, - maybe_left, maybe_right, maybe_margin_left, - maybe_margin_right, min_width, maybe_height); + base::Optional<LayoutUnit> maybe_min_width = GetUsedMinWidthIfNotAuto( + computed_style(), layout_params.containing_block_size, + &min_width_depends_on_containing_block); + if (maybe_min_width && (width() < maybe_min_width.value_or(LayoutUnit()))) { + UpdateContentWidthAndMargins( + layout_params.containing_block_size.width(), + layout_params.shrink_to_fit_width_forced, + min_width_depends_on_containing_block, maybe_left, maybe_right, + maybe_margin_left, maybe_margin_right, maybe_min_width, maybe_height); } } @@ -239,9 +239,9 @@ // applied again, but this time using the value of 'min-height' as the // computed value for 'height'. // https://www.w3.org/TR/CSS21/visudet.html#min-max-heights - base::Optional<LayoutUnit> min_height = - GetUsedMinHeight(computed_style(), layout_params.containing_block_size); - if (height() < min_height.value()) { + base::Optional<LayoutUnit> min_height = GetUsedMinHeightIfNotAuto( + computed_style(), layout_params.containing_block_size); + if (min_height && (height() < min_height.value())) { UpdateContentHeightAndMargins(layout_params.containing_block_size, maybe_top, maybe_bottom, maybe_margin_top, maybe_margin_bottom, min_height);
diff --git a/src/cobalt/layout/box_intersection_observer_module.cc b/src/cobalt/layout/box_intersection_observer_module.cc index d09d3b6..124d36c 100644 --- a/src/cobalt/layout/box_intersection_observer_module.cc +++ b/src/cobalt/layout/box_intersection_observer_module.cc
@@ -14,6 +14,7 @@ #include "cobalt/layout/box_intersection_observer_module.h" +#include "base/trace_event/trace_event.h" #include "cobalt/layout/box.h" namespace cobalt { @@ -45,6 +46,9 @@ } void BoxIntersectionObserverModule::UpdateIntersectionObservations() { + TRACE_EVENT0( + "cobalt::layout", + "BoxIntersectionObserverModule::UpdateIntersectionObservations()"); ContainerBox* container_box = box_->AsContainerBox(); if (!container_box) { return;
diff --git a/src/cobalt/layout/flex_container_box.cc b/src/cobalt/layout/flex_container_box.cc index 73067f4..b62921d 100644 --- a/src/cobalt/layout/flex_container_box.cc +++ b/src/cobalt/layout/flex_container_box.cc
@@ -15,6 +15,7 @@ #include "cobalt/layout/flex_container_box.h" #include <algorithm> +#include <vector> #include "cobalt/cssom/computed_style.h" #include "cobalt/cssom/keyword_value.h" @@ -54,12 +55,12 @@ computed_style(), layout_params.containing_block_size, &height_depends_on_containing_block); - LayoutUnit min_width = GetUsedMinWidth( + base::Optional<LayoutUnit> min_width = GetUsedMinWidthIfNotAuto( computed_style(), layout_params.containing_block_size, NULL); base::Optional<LayoutUnit> max_width = GetUsedMaxWidthIfNotNone( computed_style(), layout_params.containing_block_size, NULL); - LayoutUnit min_height = - GetUsedMinHeight(computed_style(), layout_params.containing_block_size); + base::Optional<LayoutUnit> min_height = GetUsedMinHeightIfNotAuto( + computed_style(), layout_params.containing_block_size); base::Optional<LayoutUnit> max_height = GetUsedMaxHeightIfNotNone( computed_style(), layout_params.containing_block_size); @@ -147,20 +148,20 @@ } if (main_space) { - if (max_main_space_ && main_space.value() > max_main_space_.value()) { + if (max_main_space_ && *main_space > *max_main_space_) { main_space = max_main_space_; } - if (main_space.value() < min_main_space_) { + if (min_main_space_ && *main_space < *min_main_space_) { main_space = min_main_space_; } } if (cross_space) { - if (max_cross_space_ && cross_space_.value() > max_cross_space_.value()) { + if (max_cross_space_ && *cross_space_ > *max_cross_space_) { cross_space = max_cross_space_; } - if (cross_space.value() < min_cross_space_) { - cross_space = min_cross_space_; + if (min_cross_space_ && *cross_space < *min_cross_space_) { + cross_space = *min_cross_space_; } } @@ -168,85 +169,6 @@ cross_space_ = cross_space; } -LayoutUnit FlexContainerBox::DetermineFlexBaseSize( - Box* item, const LayoutParams& layout_params, - bool container_shrink_to_fit_width_forced) { - // Absolutely positioned boxes are not flex items. - DCHECK(!item->IsAbsolutelyPositioned()); - - // All flex items are block container boxes. - DCHECK(item->AsBlockContainerBox()); - - bool main_direction_is_horizontal = MainDirectionIsHorizontal(); - - // Algorithm for determine the flex base size and hypothetical main size of - // each item. - // https://www.w3.org/TR/css-flexbox-1/#algo-main-item - - // A. If the item has a definite used flex basis, that's the flex base size. - bool flex_basis_depends_on_available_space; - base::Optional<LayoutUnit> flex_basis = GetUsedFlexBasisIfNotContent( - item->computed_style(), main_direction_is_horizontal, - layout_params.containing_block_size, - &flex_basis_depends_on_available_space); - bool flex_basis_is_definite = - flex_basis && (!flex_basis_depends_on_available_space || main_space_); - if (flex_basis_is_definite) { - return flex_basis.value(); - } - - // B. If the flex item has an intrinsic aspect ratio, a used flex basis of - // content, and a definite cross size, then the flex base size is - // calculated from its inner cross size and the flex item's intrinsic - // aspect ratio. - // Sizing from intrinsic ratio is not supported. - - bool flex_basis_is_content_or_depends_on_available_space = - !flex_basis || flex_basis_depends_on_available_space; - // C. If the used flex basis is content or depends on its available space, and - // the flex container is being sized under a min-content or max-content - // constraint, size the item under that constraint. The flex base size is - // the item's resulting main size. - if (flex_basis_is_content_or_depends_on_available_space && - container_shrink_to_fit_width_forced) { - LayoutParams child_layout_params(layout_params); - child_layout_params.shrink_to_fit_width_forced = true; - item->UpdateSize(child_layout_params); - return main_direction_is_horizontal ? item->width() : item->height(); - } - - // D. Otherwise, if the used flex basis is content or depends on its available - // space, the available main size is infinite, and the flex item's inline - // axis is parallel to the main axis, lay the item out using the rules for - // a box in an orthogonal flow. The flex base size is the item's - // max-content main size. - // - if (flex_basis_is_content_or_depends_on_available_space && - main_direction_is_horizontal && !main_space_) { - // Calculate the max-content main size. - LayoutParams child_layout_params(layout_params); - child_layout_params.shrink_to_fit_width_forced = true; - item->UpdateSize(child_layout_params); - return item->width(); - } - - // E. Otherwise, size the item into the available space using its used flex - // basis in place of its main size, treating a value of content as - // max-content. If a cross size is needed to determine the main size (e.g. - // when the flex item's main size is in its block axis) and the flex item's - // cross size is auto and not definite, in this calculation use fit-content - // as the flex item's cross size. The flex base size is the item's - // resulting main size. - // TODO: handle 'if (!main_direction_is_horizontal)' and auto - // height, see above. - LayoutParams child_layout_params(layout_params); - if (!flex_basis) { - child_layout_params.shrink_to_fit_width_forced = true; - } - item->UpdateSize(child_layout_params); - return main_direction_is_horizontal ? item->width() : item->height(); -} - // From |Box|. void FlexContainerBox::UpdateContentSizeAndMargins( const LayoutParams& layout_params) { @@ -281,51 +203,24 @@ LayoutParams child_layout_params; child_layout_params.containing_block_size = available_space; - // TODO: Verify if this is correct, including the call to |UpdateRect| below. - // Not setting this appears to result in incorrect hypothetical main size. - child_layout_params.shrink_to_fit_width_forced = true; - FlexFormattingContext flex_formatting_context( child_layout_params, main_direction_is_horizontal, DirectionIsReversed()); + std::vector<std::unique_ptr<FlexItem>> items; + items.reserve(child_boxes().size()); + for (Boxes::const_iterator child_box_iterator = child_boxes().begin(); child_box_iterator != child_boxes().end(); ++child_box_iterator) { Box* child_box = *child_box_iterator; - if (child_box->IsAbsolutelyPositioned()) { - flex_formatting_context.EstimateStaticPosition(child_box); - } else { + if (!child_box->IsAbsolutelyPositioned()) { flex_formatting_context.UpdateRect(child_box); - FlexFormattingContext::ItemParameters parameters; - parameters.flex_base_size = - DetermineFlexBaseSize(child_box, child_layout_params, - layout_params.shrink_to_fit_width_forced); - // The hypothetical main size is the item's flex base size clamped - // according to its used min and max main sizes. - if (main_direction_is_horizontal) { - LayoutUnit min_width = - GetUsedMinWidth(child_box->computed_style(), available_space, NULL); - parameters.hypothetical_main_size = - std::max(min_width, parameters.flex_base_size); - base::Optional<LayoutUnit> max_width = GetUsedMaxWidthIfNotNone( - child_box->computed_style(), available_space, NULL); - if (max_width) { - parameters.hypothetical_main_size = - std::min(max_width.value(), parameters.hypothetical_main_size); - } - } else { - LayoutUnit min_height = - GetUsedMinHeight(child_box->computed_style(), available_space); - parameters.hypothetical_main_size = - std::max(min_height, parameters.flex_base_size); - base::Optional<LayoutUnit> max_height = GetUsedMaxHeightIfNotNone( - child_box->computed_style(), available_space); - if (max_height) { - parameters.hypothetical_main_size = - std::min(max_height.value(), parameters.hypothetical_main_size); - } - } - flex_formatting_context.SetItemParameters(child_box, parameters); + auto item = FlexItem::Create(child_box, main_direction_is_horizontal); + item->DetermineFlexBaseSize(child_layout_params, main_space_, + layout_params.shrink_to_fit_width_forced); + item->DetermineHypotheticalMainSize( + child_layout_params.containing_block_size); + items.emplace_back(std::move(item)); } } @@ -371,11 +266,11 @@ } LayoutUnit main_size = flex_formatting_context.main_size(); - if (max_main_space_ && main_size > max_main_space_.value()) { - main_size = max_main_space_.value(); + if (max_main_space_ && main_size > *max_main_space_) { + main_size = *max_main_space_; } - if (main_size < min_main_space_) { - main_size = min_main_space_; + if (min_main_space_ && main_size < *min_main_space_) { + main_size = *min_main_space_; } flex_formatting_context.set_main_size(main_size); @@ -384,16 +279,14 @@ } else { set_height(main_size); } + flex_formatting_context.SetContainerMainSize(main_size); // Main Size Determination: // 5. Collect flex items into flex lines. flex_formatting_context.set_multi_line(ContainerIsMultiLine()); - for (Boxes::const_iterator child_box_iterator = child_boxes().begin(); - child_box_iterator != child_boxes().end(); ++child_box_iterator) { - Box* child_box = *child_box_iterator; - if (!child_box->IsAbsolutelyPositioned()) { - flex_formatting_context.CollectItemIntoLine(child_box); - } + for (auto& item : items) { + DCHECK(!item->box()->IsAbsolutelyPositioned()); + flex_formatting_context.CollectItemIntoLine(std::move(item)); } // Perform remaining steps of the layout of the items. @@ -407,17 +300,6 @@ set_width(flex_formatting_context.cross_size()); } - // Layout positioned child boxes. - - // TODO: Check if this should be content box instead of padding box. - // https://www.w3.org/TR/css-flexbox-1/#abspos-items - LayoutParams absolute_child_layout_params; - absolute_child_layout_params.containing_block_size.set_width( - GetPaddingBoxWidth()); - absolute_child_layout_params.containing_block_size.set_height( - GetPaddingBoxHeight()); - UpdateRectOfPositionedChildBoxes(layout_params, absolute_child_layout_params); - base::Optional<LayoutUnit> maybe_margin_left = GetUsedMarginLeftIfNotAuto( computed_style(), layout_params.containing_block_size); base::Optional<LayoutUnit> maybe_margin_right = GetUsedMarginRightIfNotAuto( @@ -433,7 +315,11 @@ set_margin_top(maybe_margin_top.value_or(LayoutUnit())); set_margin_bottom(maybe_margin_bottom.value_or(LayoutUnit())); - baseline_ = flex_formatting_context.GetBaseline(); + if (child_boxes().empty()) { + baseline_ = GetBorderBoxHeight(); + } else { + baseline_ = flex_formatting_context.GetBaseline(); + } } WrapResult FlexContainerBox::TryWrapAt( @@ -481,8 +367,6 @@ } LayoutUnit FlexContainerBox::GetBaselineOffsetFromTopMarginEdge() const { - // TODO: Complete implementation of flex container baselines. - // https://www.w3.org/TR/css-flexbox-1/#flex-baselines return GetContentBoxOffsetFromMarginBox().y() + baseline_; } @@ -500,12 +384,8 @@ TextBox* text_box = child_box->AsTextBox(); switch (child_box->GetLevel()) { case kBlockLevel: - if (!child_box->IsAbsolutelyPositioned()) { - PushBackDirectChild(child_box); - break; - } - // Fall through if child is out-of-flow. - + PushBackDirectChild(child_box); + break; case kInlineLevel: if (text_box && !text_box->HasNonCollapsibleText()) { // Text boxes with only white space are not rendered, just as if
diff --git a/src/cobalt/layout/flex_container_box.h b/src/cobalt/layout/flex_container_box.h index 0c4be6c..5c5007b 100644 --- a/src/cobalt/layout/flex_container_box.h +++ b/src/cobalt/layout/flex_container_box.h
@@ -88,10 +88,10 @@ base::Optional<LayoutUnit> main_space_; base::Optional<LayoutUnit> cross_space_; - LayoutUnit min_main_space_; + base::Optional<LayoutUnit> min_main_space_; base::Optional<LayoutUnit> max_main_space_; - LayoutUnit min_cross_space_; + base::Optional<LayoutUnit> min_cross_space_; base::Optional<LayoutUnit> max_cross_space_; LayoutUnit baseline_;
diff --git a/src/cobalt/layout/flex_formatting_context.cc b/src/cobalt/layout/flex_formatting_context.cc index be295e6..b106ffe 100644 --- a/src/cobalt/layout/flex_formatting_context.cc +++ b/src/cobalt/layout/flex_formatting_context.cc
@@ -35,7 +35,11 @@ void FlexFormattingContext::UpdateRect(Box* child_box) { DCHECK(!child_box->IsAbsolutelyPositioned()); - child_box->UpdateSize(layout_params_); + { + LayoutParams child_layout_params(layout_params_); + child_layout_params.shrink_to_fit_width_forced = true; + child_box->UpdateSize(child_layout_params); + } // Shrink-to-fit doesn't exists anymore by itself in CSS3. It is called the // fit-content size, which is derived from the 'min-content' and 'max-content' @@ -51,13 +55,8 @@ set_auto_height(child_box->height()); } -void FlexFormattingContext::EstimateStaticPosition(Box* child_box) { - DCHECK(child_box->IsAbsolutelyPositioned()); - child_box->UpdateSize(layout_params_); - // TODO set static position? Also, memoize because there may be multiple... -} - -void FlexFormattingContext::CollectItemIntoLine(Box* item) { +void FlexFormattingContext::CollectItemIntoLine( + std::unique_ptr<FlexItem>&& item) { // Collect flex items into flex lines: // https://www.w3.org/TR/css-flexbox-1/#algo-line-break if (lines_.empty()) { @@ -65,31 +64,21 @@ main_direction_is_horizontal_, direction_is_reversed_, main_size_)); } - ItemParameters parameters = GetItemParameters(item); - if (multi_line_) { - if (lines_.back()->TryAddItem(item, parameters.flex_base_size, - parameters.hypothetical_main_size)) { - return; - } else { - lines_.emplace_back(new FlexLine(layout_params_, - main_direction_is_horizontal_, - direction_is_reversed_, main_size_)); - } + if (multi_line_ && !lines_.back()->CanAddItem(*item)) { + lines_.emplace_back(new FlexLine(layout_params_, + main_direction_is_horizontal_, + direction_is_reversed_, main_size_)); } - lines_.back()->AddItem(item, parameters.flex_base_size, - parameters.hypothetical_main_size); + lines_.back()->AddItem(std::move(item)); } void FlexFormattingContext::ResolveFlexibleLengthsAndCrossSizes( - const base::Optional<LayoutUnit>& cross_space, LayoutUnit min_cross_space, + const base::Optional<LayoutUnit>& cross_space, + const base::Optional<LayoutUnit>& min_cross_space, const base::Optional<LayoutUnit>& max_cross_space, const scoped_refptr<cssom::PropertyValue>& align_content) { - if (lines_.empty()) { - return; - } - // Algorithm for Flex Layout: // https://www.w3.org/TR/css-flexbox-1/#layout-algorithm @@ -118,8 +107,8 @@ // https://www.w3.org/TR/css-flexbox-1/#change-201403-clamp-single-line if (!multi_line_) { LayoutUnit line_cross_size = lines_.front()->cross_size(); - if (line_cross_size < min_cross_space) { - lines_.front()->set_cross_size(min_cross_space); + if (min_cross_space && line_cross_size < *min_cross_space) { + lines_.front()->set_cross_size(*min_cross_space); } else if (max_cross_space && line_cross_size > *max_cross_space) { lines_.front()->set_cross_size(*max_cross_space); } @@ -142,12 +131,16 @@ cross_size_ = total_cross_size; } // Clamped by the used min and max cross sizes of the flex container. - if (cross_size_ < min_cross_space) { - cross_size_ = min_cross_space; + if (min_cross_space && cross_size_ < *min_cross_space) { + cross_size_ = *min_cross_space; } else if (max_cross_space && cross_size_ > *max_cross_space) { cross_size_ = *max_cross_space; } + if (lines_.empty()) { + return; + } + LayoutUnit leftover_cross_size = cross_size_ - total_cross_size; // 9. Handle 'align-content: stretch'. if (align_content == cssom::KeywordValue::GetStretch()) { @@ -213,12 +206,9 @@ NOTIMPLEMENTED() << "Column flex boxes not yet implemented."; } - // TODO: Complete implementation of flex container baselines. - // https://www.w3.org/TR/css-flexbox-1/#flex-baselines - - LayoutUnit baseline = LayoutUnit(); + LayoutUnit baseline = cross_size_; if (!lines_.empty()) { - if (direction_is_reversed_) { + if (direction_is_reversed_ && !main_direction_is_horizontal_) { baseline = lines_.back()->GetBaseline(); } else { baseline = lines_.front()->GetBaseline();
diff --git a/src/cobalt/layout/flex_formatting_context.h b/src/cobalt/layout/flex_formatting_context.h index 3217380..9df264e 100644 --- a/src/cobalt/layout/flex_formatting_context.h +++ b/src/cobalt/layout/flex_formatting_context.h
@@ -28,11 +28,6 @@ class FlexFormattingContext : public FormattingContext { public: - struct ItemParameters { - LayoutUnit flex_base_size; - LayoutUnit hypothetical_main_size; - }; - FlexFormattingContext(const LayoutParams& layout_params, bool main_direction_is_horizontal, bool direction_is_reversed); @@ -42,16 +37,13 @@ // the internal state in the preparation for the next child. void UpdateRect(Box* child_box); - // Estimates the static position of the given child box. In CSS 2.1 the static - // position is only defined for absolutely positioned boxes. - void EstimateStaticPosition(Box* child_box); - // Collects the flex item into a flex line. - void CollectItemIntoLine(Box* item); + void CollectItemIntoLine(std::unique_ptr<FlexItem>&& item); // layout flex items and determine cross size. void ResolveFlexibleLengthsAndCrossSizes( - const base::Optional<LayoutUnit>& cross_space, LayoutUnit min_cross_space, + const base::Optional<LayoutUnit>& cross_space, + const base::Optional<LayoutUnit>& min_cross_space, const base::Optional<LayoutUnit>& max_cross_space, const scoped_refptr<cssom::PropertyValue>& align_content); @@ -65,20 +57,12 @@ return layout_params_.containing_block_size; } - const ItemParameters& GetItemParameters(Box* item) { - return item_parameters_.find(item)->second; - } - - void SetItemParameters(Box* item, const ItemParameters& parameters) { - item_parameters_.insert(std::make_pair(item, parameters)); - } - - LayoutUnit GetFlexBaseSize(Box* item) { - return GetItemParameters(item).flex_base_size; - } - - LayoutUnit GetHypotheticalMainSize(Box* item) { - return GetItemParameters(item).hypothetical_main_size; + void SetContainerMainSize(LayoutUnit size) { + if (main_direction_is_horizontal_) { + layout_params_.containing_block_size.set_width(size); + } else { + layout_params_.containing_block_size.set_height(size); + } } void set_multi_line(bool val) { multi_line_ = val; } @@ -86,7 +70,7 @@ LayoutUnit GetBaseline(); private: - const LayoutParams layout_params_; + LayoutParams layout_params_; const bool main_direction_is_horizontal_; const bool direction_is_reversed_; bool multi_line_ = false; @@ -94,7 +78,6 @@ LayoutUnit main_size_; LayoutUnit cross_size_; - base::hash_map<Box*, ItemParameters> item_parameters_; std::vector<std::unique_ptr<FlexLine>> lines_; DISALLOW_COPY_AND_ASSIGN(FlexFormattingContext);
diff --git a/src/cobalt/layout/flex_item.cc b/src/cobalt/layout/flex_item.cc index e49cf0b..45370f9 100644 --- a/src/cobalt/layout/flex_item.cc +++ b/src/cobalt/layout/flex_item.cc
@@ -14,9 +14,13 @@ #include "cobalt/layout/flex_item.h" +#include <algorithm> + +#include "base/logging.h" #include "base/memory/ptr_util.h" #include "cobalt/cssom/css_computed_style_data.h" #include "cobalt/cssom/number_value.h" +#include "cobalt/layout/box.h" #include "cobalt/layout/container_box.h" #include "cobalt/layout/used_style.h" @@ -28,69 +32,79 @@ // flex containers. class MainAxisHorizontalFlexItem : public FlexItem { public: - MainAxisHorizontalFlexItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size) - : FlexItem(box, flex_base_size, hypothetical_main_size) {} - + explicit MainAxisHorizontalFlexItem(Box* box) : FlexItem(box, true) {} ~MainAxisHorizontalFlexItem() override {} - LayoutUnit GetContentToMarginMainAxis() override; - LayoutUnit GetContentToMarginCrossAxis() override; - LayoutUnit GetUsedMinMainAxisSize( - const SizeLayoutUnit& containing_block_size) override; - LayoutUnit GetUsedMinCrossAxisSize( - const SizeLayoutUnit& containing_block_size) override; + LayoutUnit GetContentToMarginMainAxis() const override; + LayoutUnit GetContentToMarginCrossAxis() const override; + base::Optional<LayoutUnit> GetUsedMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const override; + base::Optional<LayoutUnit> GetUsedMinMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const override; + base::Optional<LayoutUnit> GetUsedMinCrossAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const override; base::Optional<LayoutUnit> GetUsedMaxMainAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) override; + const SizeLayoutUnit& containing_block_size) const override; base::Optional<LayoutUnit> GetUsedMaxCrossAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) override; + const SizeLayoutUnit& containing_block_size) const override; void DetermineHypotheticalCrossSize( const LayoutParams& layout_params) override; - LayoutUnit GetMarginBoxMainSize() override; - LayoutUnit GetMarginBoxCrossSize() override; - bool CrossSizeIsAuto() override; - bool MarginMainStartIsAuto() override; - bool MarginMainEndIsAuto() override; - bool MarginCrossStartIsAuto() override; - bool MarginCrossEndIsAuto() override; + LayoutUnit GetContentBoxMainSize() const override; + LayoutUnit GetMarginBoxMainSize() const override; + LayoutUnit GetMarginBoxCrossSize() const override; + + bool CrossSizeIsAuto() const override; + bool MarginMainStartIsAuto() const override; + bool MarginMainEndIsAuto() const override; + bool MarginCrossStartIsAuto() const override; + bool MarginCrossEndIsAuto() const override; void SetCrossSize(LayoutUnit cross_size) override; void SetMainAxisStart(LayoutUnit position) override; void SetCrossAxisStart(LayoutUnit position) override; }; -LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginMainAxis() { +LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginMainAxis() const { return box()->GetContentToMarginHorizontal(); } -LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginCrossAxis() { +LayoutUnit MainAxisHorizontalFlexItem::GetContentToMarginCrossAxis() const { return box()->GetContentToMarginVertical(); } -LayoutUnit MainAxisHorizontalFlexItem::GetUsedMinMainAxisSize( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMinWidth(box()->computed_style(), containing_block_size, NULL); +base::Optional<LayoutUnit> +MainAxisHorizontalFlexItem::GetUsedMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const { + return GetUsedWidthIfNotAuto(computed_style(), containing_block_size, NULL); } -LayoutUnit MainAxisHorizontalFlexItem::GetUsedMinCrossAxisSize( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMinHeight(box()->computed_style(), containing_block_size); +base::Optional<LayoutUnit> +MainAxisHorizontalFlexItem::GetUsedMinMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const { + base::Optional<LayoutUnit> maybe_used_min_space = + GetUsedMinWidthIfNotAuto(computed_style(), containing_block_size, NULL); + return maybe_used_min_space; +} + +base::Optional<LayoutUnit> +MainAxisHorizontalFlexItem::GetUsedMinCrossAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const { + return GetUsedMinHeightIfNotAuto(computed_style(), containing_block_size); } base::Optional<LayoutUnit> MainAxisHorizontalFlexItem::GetUsedMaxMainAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMaxWidthIfNotNone(box()->computed_style(), - containing_block_size, NULL); + const SizeLayoutUnit& containing_block_size) const { + return GetUsedMaxWidthIfNotNone(computed_style(), containing_block_size, + NULL); } base::Optional<LayoutUnit> MainAxisHorizontalFlexItem::GetUsedMaxCrossAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMaxHeightIfNotNone(box()->computed_style(), - containing_block_size); + const SizeLayoutUnit& containing_block_size) const { + return GetUsedMaxHeightIfNotNone(computed_style(), containing_block_size); } void MainAxisHorizontalFlexItem::DetermineHypotheticalCrossSize( @@ -109,36 +123,36 @@ box()->UpdateSize(child_layout_params); } -LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxMainSize() { +LayoutUnit MainAxisHorizontalFlexItem::GetContentBoxMainSize() const { + return box()->width(); +} + +LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxMainSize() const { return box()->GetMarginBoxWidth(); } -LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxCrossSize() { +LayoutUnit MainAxisHorizontalFlexItem::GetMarginBoxCrossSize() const { return box()->GetMarginBoxHeight(); } -bool MainAxisHorizontalFlexItem::CrossSizeIsAuto() { - return box()->computed_style()->height() == cssom::KeywordValue::GetAuto(); +bool MainAxisHorizontalFlexItem::CrossSizeIsAuto() const { + return computed_style()->height() == cssom::KeywordValue::GetAuto(); } -bool MainAxisHorizontalFlexItem::MarginMainStartIsAuto() { - return box()->computed_style()->margin_left() == - cssom::KeywordValue::GetAuto(); +bool MainAxisHorizontalFlexItem::MarginMainStartIsAuto() const { + return computed_style()->margin_left() == cssom::KeywordValue::GetAuto(); } -bool MainAxisHorizontalFlexItem::MarginMainEndIsAuto() { - return box()->computed_style()->margin_right() == - cssom::KeywordValue::GetAuto(); +bool MainAxisHorizontalFlexItem::MarginMainEndIsAuto() const { + return computed_style()->margin_right() == cssom::KeywordValue::GetAuto(); } -bool MainAxisHorizontalFlexItem::MarginCrossStartIsAuto() { - return box()->computed_style()->margin_top() == - cssom::KeywordValue::GetAuto(); +bool MainAxisHorizontalFlexItem::MarginCrossStartIsAuto() const { + return computed_style()->margin_top() == cssom::KeywordValue::GetAuto(); } -bool MainAxisHorizontalFlexItem::MarginCrossEndIsAuto() { - return box()->computed_style()->margin_bottom() == - cssom::KeywordValue::GetAuto(); +bool MainAxisHorizontalFlexItem::MarginCrossEndIsAuto() const { + return computed_style()->margin_bottom() == cssom::KeywordValue::GetAuto(); } void MainAxisHorizontalFlexItem::SetCrossSize(LayoutUnit cross_size) { @@ -158,70 +172,79 @@ // flex containers. class MainAxisVerticalFlexItem : public FlexItem { public: - MainAxisVerticalFlexItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size) - : FlexItem(box, flex_base_size, hypothetical_main_size) {} - + explicit MainAxisVerticalFlexItem(Box* box) : FlexItem(box, false) {} ~MainAxisVerticalFlexItem() override {} - LayoutUnit GetContentToMarginMainAxis() override; - LayoutUnit GetContentToMarginCrossAxis() override; + LayoutUnit GetContentToMarginMainAxis() const override; + LayoutUnit GetContentToMarginCrossAxis() const override; - LayoutUnit GetUsedMinMainAxisSize( - const SizeLayoutUnit& containing_block_size) override; - LayoutUnit GetUsedMinCrossAxisSize( - const SizeLayoutUnit& containing_block_size) override; + base::Optional<LayoutUnit> GetUsedMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const override; + base::Optional<LayoutUnit> GetUsedMinMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const override; + base::Optional<LayoutUnit> GetUsedMinCrossAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const override; base::Optional<LayoutUnit> GetUsedMaxMainAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) override; + const SizeLayoutUnit& containing_block_size) const override; base::Optional<LayoutUnit> GetUsedMaxCrossAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) override; + const SizeLayoutUnit& containing_block_size) const override; void DetermineHypotheticalCrossSize( const LayoutParams& layout_params) override; - LayoutUnit GetMarginBoxMainSize() override; - LayoutUnit GetMarginBoxCrossSize() override; - bool CrossSizeIsAuto() override; - bool MarginMainStartIsAuto() override; - bool MarginMainEndIsAuto() override; - bool MarginCrossStartIsAuto() override; - bool MarginCrossEndIsAuto() override; + LayoutUnit GetContentBoxMainSize() const override; + LayoutUnit GetMarginBoxMainSize() const override; + LayoutUnit GetMarginBoxCrossSize() const override; + + bool CrossSizeIsAuto() const override; + bool MarginMainStartIsAuto() const override; + bool MarginMainEndIsAuto() const override; + bool MarginCrossStartIsAuto() const override; + bool MarginCrossEndIsAuto() const override; void SetCrossSize(LayoutUnit cross_size) override; void SetMainAxisStart(LayoutUnit position) override; void SetCrossAxisStart(LayoutUnit position) override; }; -LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginMainAxis() { +LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginMainAxis() const { return box()->GetContentToMarginVertical(); } -LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginCrossAxis() { +LayoutUnit MainAxisVerticalFlexItem::GetContentToMarginCrossAxis() const { return box()->GetContentToMarginHorizontal(); } -LayoutUnit MainAxisVerticalFlexItem::GetUsedMinMainAxisSize( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMinHeight(box()->computed_style(), containing_block_size); +base::Optional<LayoutUnit> +MainAxisVerticalFlexItem::GetUsedMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const { + return GetUsedHeightIfNotAuto(computed_style(), containing_block_size, NULL); } -LayoutUnit MainAxisVerticalFlexItem::GetUsedMinCrossAxisSize( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMinWidth(box()->computed_style(), containing_block_size, NULL); +base::Optional<LayoutUnit> +MainAxisVerticalFlexItem::GetUsedMinMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const { + return GetUsedMinHeightIfNotAuto(computed_style(), containing_block_size); +} + +base::Optional<LayoutUnit> +MainAxisVerticalFlexItem::GetUsedMinCrossAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const { + return GetUsedMinWidthIfNotAuto(computed_style(), containing_block_size, + NULL); } base::Optional<LayoutUnit> MainAxisVerticalFlexItem::GetUsedMaxMainAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMaxHeightIfNotNone(box()->computed_style(), - containing_block_size); + const SizeLayoutUnit& containing_block_size) const { + return GetUsedMaxHeightIfNotNone(computed_style(), containing_block_size); } base::Optional<LayoutUnit> MainAxisVerticalFlexItem::GetUsedMaxCrossAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) { - return GetUsedMaxWidthIfNotNone(box()->computed_style(), - containing_block_size, NULL); + const SizeLayoutUnit& containing_block_size) const { + return GetUsedMaxWidthIfNotNone(computed_style(), containing_block_size, + NULL); } void MainAxisVerticalFlexItem::DetermineHypotheticalCrossSize( @@ -235,36 +258,36 @@ box()->set_height(target_main_size()); } -LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxMainSize() { +LayoutUnit MainAxisVerticalFlexItem::GetContentBoxMainSize() const { + return box()->height(); +} + +LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxMainSize() const { return box()->GetMarginBoxHeight(); } -LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxCrossSize() { +LayoutUnit MainAxisVerticalFlexItem::GetMarginBoxCrossSize() const { return box()->GetMarginBoxWidth(); } -bool MainAxisVerticalFlexItem::CrossSizeIsAuto() { - return box()->computed_style()->width() == cssom::KeywordValue::GetAuto(); +bool MainAxisVerticalFlexItem::CrossSizeIsAuto() const { + return computed_style()->width() == cssom::KeywordValue::GetAuto(); } -bool MainAxisVerticalFlexItem::MarginMainStartIsAuto() { - return box()->computed_style()->margin_top() == - cssom::KeywordValue::GetAuto(); +bool MainAxisVerticalFlexItem::MarginMainStartIsAuto() const { + return computed_style()->margin_top() == cssom::KeywordValue::GetAuto(); } -bool MainAxisVerticalFlexItem::MarginMainEndIsAuto() { - return box()->computed_style()->margin_bottom() == - cssom::KeywordValue::GetAuto(); +bool MainAxisVerticalFlexItem::MarginMainEndIsAuto() const { + return computed_style()->margin_bottom() == cssom::KeywordValue::GetAuto(); } -bool MainAxisVerticalFlexItem::MarginCrossStartIsAuto() { - return box()->computed_style()->margin_left() == - cssom::KeywordValue::GetAuto(); +bool MainAxisVerticalFlexItem::MarginCrossStartIsAuto() const { + return computed_style()->margin_left() == cssom::KeywordValue::GetAuto(); } -bool MainAxisVerticalFlexItem::MarginCrossEndIsAuto() { - return box()->computed_style()->margin_right() == - cssom::KeywordValue::GetAuto(); +bool MainAxisVerticalFlexItem::MarginCrossEndIsAuto() const { + return computed_style()->margin_right() == cssom::KeywordValue::GetAuto(); } void MainAxisVerticalFlexItem::SetCrossSize(LayoutUnit cross_size) { @@ -279,21 +302,15 @@ box()->set_left(position); } -FlexItem::FlexItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size) - : box_(box), - flex_base_size_(flex_base_size), - hypothetical_main_size_(hypothetical_main_size) {} +FlexItem::FlexItem(Box* box, bool main_direction_is_horizontal) + : box_(box), main_direction_is_horizontal_(main_direction_is_horizontal) {} -std::unique_ptr<FlexItem> FlexItem::Create(bool main_direction_is_horizontal, - Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size) { +std::unique_ptr<FlexItem> FlexItem::Create(Box* box, + bool main_direction_is_horizontal) { if (main_direction_is_horizontal) { - return base::WrapUnique(new MainAxisHorizontalFlexItem( - box, flex_base_size, hypothetical_main_size)); + return base::WrapUnique(new MainAxisHorizontalFlexItem(box)); } else { - return base::WrapUnique(new MainAxisVerticalFlexItem( - box, flex_base_size, hypothetical_main_size)); + return base::WrapUnique(new MainAxisVerticalFlexItem(box)); } } @@ -309,8 +326,7 @@ const scoped_refptr<cobalt::cssom::PropertyValue>& FlexItem::GetUsedAlignSelfPropertyValue() { DCHECK(box()->parent()); - return GetUsedAlignSelf(box()->computed_style(), - box()->parent()->computed_style()); + return GetUsedAlignSelf(computed_style(), box()->parent()->computed_style()); } const scoped_refptr<cobalt::cssom::PropertyValue>& @@ -319,6 +335,150 @@ return box()->parent()->computed_style()->justify_content(); } +bool FlexItem::OverflowIsVisible() const { + return computed_style()->overflow() == cssom::KeywordValue::GetVisible(); +} + +void FlexItem::DetermineFlexBaseSize( + const LayoutParams& layout_params, + const base::Optional<LayoutUnit>& main_space, + bool container_shrink_to_fit_width_forced) { + // Absolutely positioned boxes are not flex items. + DCHECK(!box()->IsAbsolutelyPositioned()); + + // All flex items are block container boxes. + DCHECK(box()->AsBlockContainerBox()); + + // Algorithm for determine the flex base size and hypothetical main size of + // each item. + // https://www.w3.org/TR/css-flexbox-1/#algo-main-item + + // A. If the item has a definite used flex basis, that's the flex base size. + bool flex_basis_depends_on_available_space; + base::Optional<LayoutUnit> flex_basis = GetUsedFlexBasisIfNotContent( + computed_style(), main_direction_is_horizontal_, + layout_params.containing_block_size, + &flex_basis_depends_on_available_space); + bool flex_basis_is_definite = + flex_basis && (!flex_basis_depends_on_available_space || main_space); + if (flex_basis_is_definite) { + flex_base_size_ = *flex_basis; + return; + } + + // B. If the flex item has an intrinsic aspect ratio, a used flex basis of + // content, and a definite cross size, then the flex base size is + // calculated from its inner cross size and the flex item's intrinsic + // aspect ratio. + // Sizing from intrinsic ratio is not supported. + + bool flex_basis_is_content_or_depends_on_available_space = + !flex_basis || flex_basis_depends_on_available_space; + // C. If the used flex basis is content or depends on its available space, and + // the flex container is being sized under a min-content or max-content + // constraint, size the item under that constraint. The flex base size is + // the item's resulting main size. + if (flex_basis_is_content_or_depends_on_available_space && + container_shrink_to_fit_width_forced) { + flex_base_size_ = + main_direction_is_horizontal_ ? box()->width() : box()->height(); + return; + } + + // D. Otherwise, if the used flex basis is content or depends on its available + // space, the available main size is infinite, and the flex item's inline + // axis is parallel to the main axis, lay the item out using the rules for + // a box in an orthogonal flow. The flex base size is the item's + // max-content main size. + if (flex_basis_is_content_or_depends_on_available_space && + main_direction_is_horizontal_ && !main_space) { + flex_base_size_ = box()->width(); + return; + } + + // E. Otherwise, size the item into the available space using its used flex + // basis in place of its main size, treating a value of content as + // max-content. If a cross size is needed to determine the main size (e.g. + // when the flex item's main size is in its block axis) and the flex item's + // cross size is auto and not definite, in this calculation use fit-content + // as the flex item's cross size. The flex base size is the item's + // resulting main size. + // TODO: handle 'if (!main_direction_is_horizontal)' and auto + // height, see above. + flex_base_size_ = + main_direction_is_horizontal_ ? box()->width() : box()->height(); +} + +void FlexItem::DetermineHypotheticalMainSize( + const SizeLayoutUnit& available_space) { + // The hypothetical main size is the item's flex base size clamped + // according to its used min and max main sizes. + base::Optional<LayoutUnit> maybe_min_main_size = + GetUsedMinMainAxisSizeIfNotAuto(available_space); + LayoutUnit main_size = + std::max(maybe_min_main_size.value_or(LayoutUnit()), flex_base_size()); + base::Optional<LayoutUnit> maybe_max_main_size = + GetUsedMaxMainAxisSizeIfNotNone(available_space); + if (maybe_max_main_size) { + main_size = std::min(*maybe_max_main_size, main_size); + } + hypothetical_main_size_ = main_size; +} + +base::Optional<LayoutUnit> FlexItem::GetContentBasedMinimumSize( + const SizeLayoutUnit& containing_block_size) const { + // Automatic Minimum Size of Flex Items. + // https://www.w3.org/TR/css-flexbox-1/#min-size-auto + + // If the item's computed main size property is definite, then the specified + // size suggestion is that size (clamped by its max main size property if + // it's definite). It is otherwise undefined. + // https://www.w3.org/TR/css-flexbox-1/#specified-size-suggestion + base::Optional<LayoutUnit> specified_min_size_suggestion = + GetUsedMinMainAxisSizeIfNotAuto(containing_block_size); + + base::Optional<LayoutUnit> specified_size_suggestion = + GetUsedMainAxisSizeIfNotAuto(containing_block_size); + if (specified_size_suggestion.has_value()) { + return specified_min_size_suggestion; + } + + base::Optional<LayoutUnit> maybe_max_main_size = + GetUsedMaxMainAxisSizeIfNotNone(containing_block_size); + if (specified_min_size_suggestion.has_value() && + maybe_max_main_size.has_value()) { + specified_min_size_suggestion = + std::min(*maybe_max_main_size, *specified_min_size_suggestion); + } + + // The content size suggestion is the min-content size in the main axis, + // clamped by the max main size property if that is definite. + // https://www.w3.org/TR/css-flexbox-1/#content-size-suggestion + base::Optional<LayoutUnit> content_size_suggestion; + if (OverflowIsVisible()) { + content_size_suggestion = GetContentBoxMainSize(); + if (maybe_max_main_size.has_value()) { + content_size_suggestion = + std::min(*maybe_max_main_size, *content_size_suggestion); + } + } + + if (!specified_min_size_suggestion.has_value()) { + // If the box has neither a specified size suggestion nor an aspect ratio, + // its content-based minimum size is the content size suggestion. + return content_size_suggestion; + } else { + if (content_size_suggestion.has_value()) { + // In general, the content-based minimum size of a flex item is the + // smaller of its content size suggestion and its specified size + // suggestion. + specified_min_size_suggestion = + std::min(*content_size_suggestion, *specified_min_size_suggestion); + return specified_min_size_suggestion; + } + } + return specified_min_size_suggestion; +} } // namespace layout } // namespace cobalt
diff --git a/src/cobalt/layout/flex_item.h b/src/cobalt/layout/flex_item.h index 8f12150..91d16bf 100644 --- a/src/cobalt/layout/flex_item.h +++ b/src/cobalt/layout/flex_item.h
@@ -18,6 +18,7 @@ #include <vector> #include "base/logging.h" +#include "base/optional.h" #include "cobalt/layout/box.h" #include "cobalt/layout/layout_unit.h" @@ -28,22 +29,23 @@ class FlexItem { public: // Disallow Copy and Assign. - FlexItem(const FlexItem&) = delete; + explicit FlexItem(const FlexItem&) = delete; FlexItem& operator=(const FlexItem&) = delete; - - // Default move constructor to make the class emplace constructible. - FlexItem(FlexItem&& that) = default; + explicit FlexItem(FlexItem&& that) = delete; virtual ~FlexItem() = default; - FlexItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size); + FlexItem(Box* box, bool main_direction_is_horizontal); - static std::unique_ptr<FlexItem> Create(bool main_direction_is_horizontal_, - Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size); + static std::unique_ptr<FlexItem> Create(Box* box, + bool main_direction_is_horizontal); Box* box() const { return box_; } + const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style() + const { + return box()->computed_style(); + } + LayoutUnit flex_base_size() const { return flex_base_size_; } LayoutUnit hypothetical_main_size() const { return hypothetical_main_size_; } @@ -76,57 +78,79 @@ const scoped_refptr<cobalt::cssom::PropertyValue>& GetUsedJustifyContentPropertyValue(); + // Determine the flex base size. + // https://www.w3.org/TR/css-flexbox-1/#flex-base-size + void DetermineFlexBaseSize(const LayoutParams& layout_params, + const base::Optional<LayoutUnit>& main_space, + bool container_shrink_to_fit_width_forced); + + // Determine the hypothetical main size. + // https://www.w3.org/TR/css-flexbox-1/#hypothetical-main-size + void DetermineHypotheticalMainSize(const SizeLayoutUnit& available_space); + + base::Optional<LayoutUnit> GetContentBasedMinimumSize( + const SizeLayoutUnit& containing_block_size) const; + // Return the size difference between the content and margin box on the main // axis. - virtual LayoutUnit GetContentToMarginMainAxis() = 0; + virtual LayoutUnit GetContentToMarginMainAxis() const = 0; // Return the size difference between the content and margin box on the cross // axis. - virtual LayoutUnit GetContentToMarginCrossAxis() = 0; + virtual LayoutUnit GetContentToMarginCrossAxis() const = 0; + + // Return the used style for the size in the main axis. + virtual base::Optional<LayoutUnit> GetUsedMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const = 0; // Return the used style for the min size in the main axis. - virtual LayoutUnit GetUsedMinMainAxisSize( - const SizeLayoutUnit& containing_block_size) = 0; + virtual base::Optional<LayoutUnit> GetUsedMinMainAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const = 0; // Return the used style for the min size in the cross axis. - virtual LayoutUnit GetUsedMinCrossAxisSize( - const SizeLayoutUnit& containing_block_size) = 0; + virtual base::Optional<LayoutUnit> GetUsedMinCrossAxisSizeIfNotAuto( + const SizeLayoutUnit& containing_block_size) const = 0; // Return the used style for the max size in the main axis. virtual base::Optional<LayoutUnit> GetUsedMaxMainAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) = 0; + const SizeLayoutUnit& containing_block_size) const = 0; // Return the used style for the max size in the cross axis. virtual base::Optional<LayoutUnit> GetUsedMaxCrossAxisSizeIfNotNone( - const SizeLayoutUnit& containing_block_size) = 0; + const SizeLayoutUnit& containing_block_size) const = 0; // Determine the hypothetical cross size. - // https://www.w3.org/TR/css-flexbox-1/#algo-cross-item + // https://www.w3.org/TR/css-flexbox-1/#algo-cross-item virtual void DetermineHypotheticalCrossSize( const LayoutParams& layout_params) = 0; - virtual LayoutUnit GetMarginBoxMainSize() = 0; - virtual LayoutUnit GetMarginBoxCrossSize() = 0; + virtual LayoutUnit GetContentBoxMainSize() const = 0; + virtual LayoutUnit GetMarginBoxMainSize() const = 0; + virtual LayoutUnit GetMarginBoxCrossSize() const = 0; // Return true if the computed cross axis size is auto. - virtual bool CrossSizeIsAuto() = 0; + virtual bool CrossSizeIsAuto() const = 0; // Return true if the margin at the main axis start is auto. - virtual bool MarginMainStartIsAuto() = 0; + virtual bool MarginMainStartIsAuto() const = 0; // Return true if the margin at the main axis end is auto. - virtual bool MarginMainEndIsAuto() = 0; + virtual bool MarginMainEndIsAuto() const = 0; // Return true if the margin at the cross axis start is auto. - virtual bool MarginCrossStartIsAuto() = 0; + virtual bool MarginCrossStartIsAuto() const = 0; // Return true if the margin at the cross axis end is auto. - virtual bool MarginCrossEndIsAuto() = 0; + virtual bool MarginCrossEndIsAuto() const = 0; virtual void SetCrossSize(LayoutUnit cross_size) = 0; virtual void SetMainAxisStart(LayoutUnit position) = 0; virtual void SetCrossAxisStart(LayoutUnit position) = 0; private: + // Return true if the overflow is visible + bool OverflowIsVisible() const; + Box* const box_ = nullptr; - const LayoutUnit flex_base_size_ = LayoutUnit(); - const LayoutUnit hypothetical_main_size_ = LayoutUnit(); + const bool main_direction_is_horizontal_; + LayoutUnit flex_base_size_ = LayoutUnit(); + LayoutUnit hypothetical_main_size_ = LayoutUnit(); LayoutUnit target_main_size_ = LayoutUnit(); LayoutUnit flex_space_ = LayoutUnit(); @@ -136,6 +160,19 @@ bool min_violation_ = false; }; +#ifdef COBALT_BOX_DUMP_ENABLED + +inline std::ostream& operator<<(std::ostream& stream, const FlexItem& item) { + stream << "flex_base_size= " << item.flex_base_size() + << " hypothetical_main_size = " << item.hypothetical_main_size() + << " target_main_size = " << item.target_main_size() + << " flex_space =" << item.flex_space() << " box " << *item.box() + << " flex_factor = " << item.flex_factor(); + return stream; +} + +#endif // COBALT_BOX_DUMP_ENABLED + } // namespace layout } // namespace cobalt
diff --git a/src/cobalt/layout/flex_line.cc b/src/cobalt/layout/flex_line.cc index 87d2f12..124099a 100644 --- a/src/cobalt/layout/flex_line.cc +++ b/src/cobalt/layout/flex_line.cc
@@ -35,35 +35,22 @@ items_outer_main_size_ = LayoutUnit(0); } -bool FlexLine::TryAddItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size) { - auto item = FlexItem::Create(main_direction_is_horizontal_, box, - flex_base_size, hypothetical_main_size); - +bool FlexLine::CanAddItem(const FlexItem& item) const { LayoutUnit outer_main_size = - hypothetical_main_size + item->GetContentToMarginMainAxis(); - + item.hypothetical_main_size() + item.GetContentToMarginMainAxis(); LayoutUnit next_main_size = items_outer_main_size_ + outer_main_size; - if (!items_.empty() && next_main_size > main_size_) { return false; } - - items_outer_main_size_ = next_main_size; - items_.emplace_back(item.release()); return true; } -void FlexLine::AddItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size) { - auto item = FlexItem::Create(main_direction_is_horizontal_, box, - flex_base_size, hypothetical_main_size); - +void FlexLine::AddItem(std::unique_ptr<FlexItem>&& item) { LayoutUnit outer_main_size = - hypothetical_main_size + item->GetContentToMarginMainAxis(); + item->hypothetical_main_size() + item->GetContentToMarginMainAxis(); items_outer_main_size_ += outer_main_size; - items_.emplace_back(item.release()); + items_.emplace_back(std::move(item)); } void FlexLine::ResolveFlexibleLengthsAndCrossSize() { @@ -91,13 +78,22 @@ // greater than its hypothetical main size. // - if using the flex shrink factor: any item that has a flex base size // smaller than its hypothetical main size. + LayoutUnit hypothetical_main_size = item->hypothetical_main_size(); + if (0 == item->flex_factor() || (flex_factor_grow_ && - (item->flex_base_size() > item->hypothetical_main_size())) || + (item->flex_base_size() > hypothetical_main_size)) || (!flex_factor_grow_ && - (item->flex_base_size() < item->hypothetical_main_size()))) { + (item->flex_base_size() < hypothetical_main_size))) { // Freeze, setting its target main size to its hypothetical main size. - item->set_target_main_size(item->hypothetical_main_size()); + base::Optional<LayoutUnit> content_based_minimum_size = + item->GetContentBasedMinimumSize( + layout_params_.containing_block_size); + if (content_based_minimum_size.has_value()) { + hypothetical_main_size = + std::max(hypothetical_main_size, *content_based_minimum_size); + } + item->set_target_main_size(hypothetical_main_size); // 3. Calculate initial free space. // For frozen items, use their outer target main size; @@ -149,7 +145,10 @@ initial_free_space * unfrozen_flex_factor_sum; // If the magnitude of this value is less than the magnitude of the // remaining free space, use this as the remaining free space. - if (free_space_magnitude < remaining_free_space) { + if ((free_space_magnitude >= LayoutUnit() && + free_space_magnitude < remaining_free_space) || + (free_space_magnitude < LayoutUnit() && + free_space_magnitude > remaining_free_space)) { remaining_free_space = free_space_magnitude; } } @@ -190,15 +189,22 @@ LayoutUnit unclamped_size = LayoutUnit(); LayoutUnit clamped_size = LayoutUnit(); for (auto& item : flexible_items) { - LayoutUnit used_min_space = - item->GetUsedMinMainAxisSize(layout_params_.containing_block_size); + base::Optional<LayoutUnit> maybe_used_min_space; + if (flex_factor_grow_) { + maybe_used_min_space = item->GetUsedMinMainAxisSizeIfNotAuto( + layout_params_.containing_block_size); + } else { + maybe_used_min_space = item->GetContentBasedMinimumSize( + layout_params_.containing_block_size); + } base::Optional<LayoutUnit> used_max_space = item->GetUsedMaxMainAxisSizeIfNotNone( layout_params_.containing_block_size); unclamped_size += item->target_main_size(); - if (item->target_main_size() < used_min_space) { - item->set_target_main_size(used_min_space); + if (maybe_used_min_space && + (item->target_main_size() < *maybe_used_min_space)) { + item->set_target_main_size(*maybe_used_min_space); item->set_min_violation(true); } else if (used_max_space && item->target_main_size() > *used_max_space) { item->set_target_main_size(*used_max_space); @@ -262,7 +268,6 @@ // Algorithm for Calculate the cross size of each flex line. // https://www.w3.org/TR/css-flexbox-1/#algo-cross-line - LayoutUnit max_baseline_to_top = LayoutUnit(); LayoutUnit max_baseline_to_bottom = LayoutUnit(); LayoutUnit max_hypothetical_cross_size = LayoutUnit(); for (auto& item : items_) { @@ -277,15 +282,13 @@ // hypothetical outer cross-start edge, LayoutUnit baseline_to_top = item->box()->GetBaselineOffsetFromTopMarginEdge(); - if (baseline_to_top > max_baseline_to_top) { - max_baseline_to_top = baseline_to_top; - } + max_baseline_to_top_ = std::max( + max_baseline_to_top_.value_or(LayoutUnit()), baseline_to_top); // and the largest of the distances between each item's baseline and its // hypothetical outer cross-end edge, LayoutUnit baseline_to_bottom = item->box()->height() - baseline_to_top; - if (baseline_to_bottom > max_baseline_to_bottom) { - max_baseline_to_bottom = baseline_to_bottom; - } + max_baseline_to_bottom = + std::max(max_baseline_to_bottom, baseline_to_bottom); } else { // 2. Among all the items not collected by the previous step, find the // largest outer hypothetical cross size. @@ -297,7 +300,7 @@ } // ... and sum these two values. LayoutUnit max_baseline_cross_size = - max_baseline_to_top + max_baseline_to_bottom; + max_baseline_to_top_.value_or(LayoutUnit()) + max_baseline_to_bottom; // 3. The used cross-size of the flex line is the largest of the numbers // found in the previous two steps and zero. @@ -307,40 +310,34 @@ void FlexLine::DetermineUsedCrossSizes(LayoutUnit container_cross_size) { // 11. Determine the used cross size of each flex item-> // https://www.w3.org/TR/css-flexbox-1/#algo-stretch - if (main_direction_is_horizontal_) { - SizeLayoutUnit containing_block_size(LayoutUnit(), container_cross_size); - for (auto& item : items_) { - // If a flex item has align-self: stretch, - // its computed cross size property is auto, - // and neither of its cross-axis margins are auto, - if (item->GetUsedAlignSelfPropertyValue() == - cssom::KeywordValue::GetStretch() && - item->CrossSizeIsAuto() && !item->MarginCrossStartIsAuto() && - !item->MarginCrossEndIsAuto()) { - // The used outer cross size is the used cross size of its flex line, - // clamped according to the item's used min and max cross sizes. - LayoutUnit cross_size = - cross_size_ - item->GetContentToMarginCrossAxis(); - LayoutUnit min_cross_size = - item->GetUsedMinMainAxisSize(containing_block_size); - if (min_cross_size > cross_size) { - cross_size = min_cross_size; - } - base::Optional<LayoutUnit> max_cross_size = - item->GetUsedMaxCrossAxisSizeIfNotNone(containing_block_size); - if (max_cross_size && *max_cross_size < cross_size) { - cross_size = *max_cross_size; - } - item->SetCrossSize(cross_size); - - // TODO: If the flex item has align-self: stretch, redo layout for its - // contents, treating this used size as its definite cross size so that - // percentage-sized children can be resolved. + SizeLayoutUnit containing_block_size(LayoutUnit(), container_cross_size); + for (auto& item : items_) { + // If a flex item has align-self: stretch, + // its computed cross size property is auto, + // and neither of its cross-axis margins are auto, + if (item->GetUsedAlignSelfPropertyValue() == + cssom::KeywordValue::GetStretch() && + item->CrossSizeIsAuto() && !item->MarginCrossStartIsAuto() && + !item->MarginCrossEndIsAuto()) { + // The used outer cross size is the used cross size of its flex line, + // clamped according to the item's used min and max cross sizes. + LayoutUnit cross_size = cross_size_ - item->GetContentToMarginCrossAxis(); + base::Optional<LayoutUnit> min_cross_size = + item->GetUsedMinCrossAxisSizeIfNotAuto(containing_block_size); + if (min_cross_size && (*min_cross_size > cross_size)) { + cross_size = *min_cross_size; } + base::Optional<LayoutUnit> max_cross_size = + item->GetUsedMaxCrossAxisSizeIfNotNone(containing_block_size); + if (max_cross_size && *max_cross_size < cross_size) { + cross_size = *max_cross_size; + } + item->SetCrossSize(cross_size); + + // TODO: If the flex item has align-self: stretch, redo layout for its + // contents, treating this used size as its definite cross size so that + // percentage-sized children can be resolved. } - } else { - // TODO: implement this for column flex containers. - NOTIMPLEMENTED() << "Column flex boxes not yet implemented."; } } @@ -358,12 +355,6 @@ // 12. Distribute any remaining free space. // https://www.w3.org/TR/css-flexbox-1/#algo-main-align - // TODO implement for row-reverse, column, and column-reverse. - if (!main_direction_is_horizontal_) { - // TODO: implement this for column flex containers. - NOTIMPLEMENTED() << "Column flex boxes not yet implemented."; - } - // If the remaining free space is positive and at least one main-axis margin // on this line is auto, distribute the free space equally among these // margins. @@ -377,8 +368,8 @@ auto_margins[margin_idx++] = auto_main_end; auto_margin_count += (auto_main_start ? 1 : 0) + (auto_main_end ? 1 : 0); } + LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_; if (auto_margin_count > 0) { - LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_; LayoutUnit free_space_between = leftover_free_space / auto_margin_count; margin_idx = 0; @@ -400,9 +391,16 @@ const scoped_refptr<cobalt::cssom::PropertyValue>& justify_content = items_.front()->GetUsedJustifyContentPropertyValue(); - if (justify_content == cssom::KeywordValue::GetFlexStart()) { + bool leftover_free_space_is_negative = leftover_free_space < LayoutUnit(); + + if (justify_content == cssom::KeywordValue::GetFlexStart() || + (leftover_free_space_is_negative && + justify_content == cssom::KeywordValue::GetSpaceBetween())) { // Flex items are packed toward the start of the line. // https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-flex-start + // If the leftover free-space is negative, space-between is identical to + // flex-start. + // https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-between LayoutUnit pos = LayoutUnit(); for (auto& item : items_) { LayoutUnit main_size = item->GetMarginBoxMainSize(); @@ -420,10 +418,15 @@ pos -= main_size; SetMainAxisPosition(pos, item.get()); } - } else if (justify_content == cssom::KeywordValue::GetCenter()) { + } else if (justify_content == cssom::KeywordValue::GetCenter() || + (leftover_free_space_is_negative && + justify_content == cssom::KeywordValue::GetSpaceAround())) { // Flex items are packed toward the center of the line. // https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-center - LayoutUnit pos = (main_size_ - items_outer_main_size_) / 2; + // If the leftover free-space is negative, space-around is identical to + // center. + // https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-around + LayoutUnit pos = leftover_free_space / 2; for (auto& item : items_) { LayoutUnit main_size = item->GetMarginBoxMainSize(); SetMainAxisPosition(pos, item.get()); @@ -432,7 +435,6 @@ } else if (justify_content == cssom::KeywordValue::GetSpaceBetween()) { // Flex items are evenly distributed in the line. // https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-between - LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_; LayoutUnit free_space_between = (items_.size() < 2) ? LayoutUnit() @@ -447,7 +449,6 @@ // Flex items are evenly distributed in the line, with half-size spaces on // either end. // https://www.w3.org/TR/css-flexbox-1/#valdef-justify-content-space-around - LayoutUnit leftover_free_space = main_size_ - items_outer_main_size_; LayoutUnit free_space_between = leftover_free_space / static_cast<int>(items_.size()); LayoutUnit free_space_before = free_space_between / 2; @@ -465,11 +466,6 @@ } void FlexLine::DoCrossAxisAlignment(LayoutUnit line_cross_axis_start) { - if (!main_direction_is_horizontal_) { - NOTIMPLEMENTED() << "Column flex boxes not yet implemented."; - } - - line_cross_axis_start_ = line_cross_axis_start; // Algorithm for cross axis alignment: // https://www.w3.org/TR/css-flexbox-1/#cross-alignment // 13. Resolve cross-axis auto margins. @@ -494,6 +490,11 @@ } else if (align_self == cssom::KeywordValue::GetCenter()) { cross_axis_start = (cross_size_ - cross_size) / 2; } else if (align_self == cssom::KeywordValue::GetBaseline()) { + if (main_direction_is_horizontal_ && max_baseline_to_top_.has_value()) { + LayoutUnit baseline_to_top = + item->box()->GetBaselineOffsetFromTopMarginEdge(); + cross_axis_start = *max_baseline_to_top_ - baseline_to_top; + } } else { DCHECK((align_self == cssom::KeywordValue::GetFlexStart()) || (align_self == cssom::KeywordValue::GetStretch())); @@ -504,14 +505,15 @@ } LayoutUnit FlexLine::GetBaseline() { - // TODO: Complete implementation of flex container baselines. - // https://www.w3.org/TR/css-flexbox-1/#flex-baselines - - LayoutUnit baseline = LayoutUnit(); - if (!items_.empty()) { - baseline = items_.front()->box()->GetBaselineOffsetFromTopMarginEdge(); + if (max_baseline_to_top_.has_value()) { + return *max_baseline_to_top_; } - return line_cross_axis_start_ + baseline; + LayoutUnit baseline = cross_size_; + if (!items_.empty()) { + Box* box = items_.front()->box(); + baseline = box->top() + box->GetBaselineOffsetFromTopMarginEdge(); + } + return baseline; } } // namespace layout
diff --git a/src/cobalt/layout/flex_line.h b/src/cobalt/layout/flex_line.h index 4d4a9ee..1cca9e5 100644 --- a/src/cobalt/layout/flex_line.h +++ b/src/cobalt/layout/flex_line.h
@@ -15,9 +15,11 @@ #ifndef COBALT_LAYOUT_FLEX_LINE_H_ #define COBALT_LAYOUT_FLEX_LINE_H_ +#include <memory> #include <vector> #include "base/logging.h" +#include "base/optional.h" #include "cobalt/layout/box.h" #include "cobalt/layout/flex_item.h" #include "cobalt/layout/layout_unit.h" @@ -34,14 +36,12 @@ FlexLine(const LayoutParams& layout_params, bool main_direction_is_horizontal, bool direction_is_reversed, LayoutUnit main_size); - // Attempt to add the item to the line. Returns true if the box was - // added to the line. - bool TryAddItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size); + // Return whether the item to can be added to the line. Returns false if the + // item does not fit. + bool CanAddItem(const FlexItem& item) const; // Add the item to the line. - void AddItem(Box* box, LayoutUnit flex_base_size, - LayoutUnit hypothetical_main_size); + void AddItem(std::unique_ptr<FlexItem>&& item); void ResolveFlexibleLengthsAndCrossSize(); void CalculateCrossSize(); @@ -68,10 +68,10 @@ bool flex_factor_grow_; LayoutUnit items_outer_main_size_; - LayoutUnit line_cross_axis_start_; std::vector<std::unique_ptr<FlexItem>> items_; LayoutUnit cross_size_; + base::Optional<LayoutUnit> max_baseline_to_top_; }; } // namespace layout
diff --git a/src/cobalt/layout/intersection_observer_target.cc b/src/cobalt/layout/intersection_observer_target.cc index 19fd041..24741e2 100644 --- a/src/cobalt/layout/intersection_observer_target.cc +++ b/src/cobalt/layout/intersection_observer_target.cc
@@ -17,6 +17,7 @@ #include <algorithm> #include <vector> +#include "base/trace_event/trace_event.h" #include "cobalt/cssom/computed_style_utils.h" #include "cobalt/cssom/keyword_value.h" #include "cobalt/layout/box.h" @@ -29,6 +30,9 @@ void IntersectionObserverTarget::UpdateIntersectionObservationsForTarget( ContainerBox* target_box) { + TRACE_EVENT0( + "cobalt::layout", + "IntersectionObserverTarget::UpdateIntersectionObservationsForTarget()"); // Walk up the containing block chain looking for the box referencing the // IntersectionObserverRoot corresponding to this IntersectionObserverTarget. // Skip further processing for the target if it is not a descendant of the @@ -64,16 +68,14 @@ // Let intersectionArea be intersectionRect's area. float intersection_area = intersection_rect.size().GetArea(); - // Let isIntersecting be true if targetRect and rootBounds intersect or are - // edge-adjacent, even if the intersection has zero area (because rootBounds - // or targetRect have zero area); otherwise, let isIntersecting be false. - bool is_intersecting = - intersection_rect.width() != 0 || intersection_rect.height() != 0; - // If targetArea is non-zero, let intersectionRatio be intersectionArea // divided by targetArea. Otherwise, let intersectionRatio be 1 if - // isIntersecting is true, or 0 if isIntersecting is false. - float intersection_ratio = is_intersecting ? 1.0f : 0.0f; + // targetRect and rootBounds are edge-adjacent (in the case that targetRect or + // rootbounds have zero area), and 0 otherwise. + float intersection_ratio = + (intersection_rect.width() != 0 || intersection_rect.height() != 0) + ? 1.0f + : 0.0f; if (target_area != 0) { intersection_ratio = intersection_area / target_area; } @@ -92,6 +94,9 @@ } } + // Set isIntersecting to true if |threshold_index| > 0, and false otherwise. + bool is_intersecting = threshold_index > 0; + // If thresholdIndex does not equal previousThresholdIndex or if // isIntersecting does not equal previousIsIntersecting, queue an // IntersectionObserverEntry, passing in observer, time, rootBounds,
diff --git a/src/cobalt/layout/replaced_box.cc b/src/cobalt/layout/replaced_box.cc index b5b3dac..3d2a447 100644 --- a/src/cobalt/layout/replaced_box.cc +++ b/src/cobalt/layout/replaced_box.cc
@@ -449,12 +449,16 @@ base::Optional<LayoutUnit> maybe_max_width = GetUsedMaxWidthIfNotNone( computed_style(), layout_params.containing_block_size, NULL); - LayoutUnit min_width = GetUsedMinWidth( - computed_style(), layout_params.containing_block_size, NULL); + LayoutUnit min_width = + GetUsedMinWidthIfNotAuto(computed_style(), + layout_params.containing_block_size, NULL) + .value_or(LayoutUnit()); base::Optional<LayoutUnit> maybe_max_height = GetUsedMaxHeightIfNotNone( computed_style(), layout_params.containing_block_size); LayoutUnit min_height = - GetUsedMinHeight(computed_style(), layout_params.containing_block_size); + GetUsedMinHeightIfNotAuto(computed_style(), + layout_params.containing_block_size) + .value_or(LayoutUnit()); // The values w and h stand for the results of the width and height // computations ignoring the 'min-width', 'min-height', 'max-width' and
diff --git a/src/cobalt/layout/used_style.cc b/src/cobalt/layout/used_style.cc index 7a811f7..76ce1cc 100644 --- a/src/cobalt/layout/used_style.cc +++ b/src/cobalt/layout/used_style.cc
@@ -1475,6 +1475,93 @@ } }; +class UsedMinLengthProvider : public UsedLengthValueProvider { + public: + explicit UsedMinLengthProvider(LayoutUnit percentage_base) + : UsedLengthValueProvider(percentage_base) {} + + void VisitKeyword(cssom::KeywordValue* keyword) override { + switch (keyword->value()) { + case cssom::KeywordValue::kAuto: + depends_on_containing_block_ = false; + // Leave |used_length_| in disengaged state to indicate that "auto" + // was the value. + break; + + case cssom::KeywordValue::kAbsolute: + case cssom::KeywordValue::kAlternate: + case cssom::KeywordValue::kAlternateReverse: + case cssom::KeywordValue::kBackwards: + case cssom::KeywordValue::kBaseline: + case cssom::KeywordValue::kBlock: + case cssom::KeywordValue::kBoth: + case cssom::KeywordValue::kBottom: + case cssom::KeywordValue::kBreakWord: + case cssom::KeywordValue::kCenter: + case cssom::KeywordValue::kClip: + case cssom::KeywordValue::kCollapse: + case cssom::KeywordValue::kColumn: + case cssom::KeywordValue::kColumnReverse: + case cssom::KeywordValue::kContain: + case cssom::KeywordValue::kContent: + case cssom::KeywordValue::kCover: + case cssom::KeywordValue::kCurrentColor: + case cssom::KeywordValue::kCursive: + case cssom::KeywordValue::kEllipsis: + case cssom::KeywordValue::kEnd: + case cssom::KeywordValue::kEquirectangular: + case cssom::KeywordValue::kFantasy: + case cssom::KeywordValue::kFixed: + case cssom::KeywordValue::kFlex: + case cssom::KeywordValue::kFlexEnd: + case cssom::KeywordValue::kFlexStart: + case cssom::KeywordValue::kForwards: + case cssom::KeywordValue::kHidden: + case cssom::KeywordValue::kInfinite: + case cssom::KeywordValue::kInherit: + case cssom::KeywordValue::kInitial: + case cssom::KeywordValue::kInline: + case cssom::KeywordValue::kInlineBlock: + case cssom::KeywordValue::kInlineFlex: + case cssom::KeywordValue::kLeft: + case cssom::KeywordValue::kLineThrough: + case cssom::KeywordValue::kMiddle: + case cssom::KeywordValue::kMonoscopic: + case cssom::KeywordValue::kMonospace: + case cssom::KeywordValue::kNone: + case cssom::KeywordValue::kNoRepeat: + case cssom::KeywordValue::kNormal: + case cssom::KeywordValue::kNowrap: + case cssom::KeywordValue::kPre: + case cssom::KeywordValue::kPreLine: + case cssom::KeywordValue::kPreWrap: + case cssom::KeywordValue::kRelative: + case cssom::KeywordValue::kRepeat: + case cssom::KeywordValue::kReverse: + case cssom::KeywordValue::kRight: + case cssom::KeywordValue::kRow: + case cssom::KeywordValue::kRowReverse: + case cssom::KeywordValue::kSansSerif: + case cssom::KeywordValue::kScroll: + case cssom::KeywordValue::kSerif: + case cssom::KeywordValue::kSolid: + case cssom::KeywordValue::kSpaceAround: + case cssom::KeywordValue::kSpaceBetween: + case cssom::KeywordValue::kStart: + case cssom::KeywordValue::kStatic: + case cssom::KeywordValue::kStereoscopicLeftRight: + case cssom::KeywordValue::kStereoscopicTopBottom: + case cssom::KeywordValue::kStretch: + case cssom::KeywordValue::kTop: + case cssom::KeywordValue::kUppercase: + case cssom::KeywordValue::kVisible: + case cssom::KeywordValue::kWrap: + case cssom::KeywordValue::kWrapReverse: + NOTREACHED(); + } + } +}; + class UsedFlexBasisProvider : public UsedLengthValueProvider { public: explicit UsedFlexBasisProvider(LayoutUnit percentage_base) @@ -1485,6 +1572,7 @@ void VisitKeyword(cssom::KeywordValue* keyword) override { switch (keyword->value()) { case cssom::KeywordValue::kAuto: { + depends_on_containing_block_ = false; flex_basis_is_auto_ = true; // Leave |used_length_| in disengaged state to indicate that "auto" // was the value. @@ -1691,29 +1779,29 @@ return used_length_provider.used_length(); } -LayoutUnit GetUsedMinHeight( +base::Optional<LayoutUnit> GetUsedMinHeightIfNotAuto( const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style, const SizeLayoutUnit& containing_block_size) { // Percentages: refer to height of containing block. // https://www.w3.org/TR/CSS21/visudet.html#propdef-max-height - UsedLengthValueProvider used_length_provider(containing_block_size.height()); + UsedMinLengthProvider used_length_provider(containing_block_size.height()); computed_style->min_height()->Accept(&used_length_provider); - return *used_length_provider.used_length(); + return used_length_provider.used_length(); } -LayoutUnit GetUsedMinWidth( +base::Optional<LayoutUnit> GetUsedMinWidthIfNotAuto( const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style, const SizeLayoutUnit& containing_block_size, bool* width_depends_on_containing_block) { // Percentages: refer to width of containing block. // https://www.w3.org/TR/CSS21/visudet.html#propdef-min-width - UsedLengthValueProvider used_length_provider(containing_block_size.width()); + UsedMinLengthProvider used_length_provider(containing_block_size.width()); computed_style->min_width()->Accept(&used_length_provider); if (width_depends_on_containing_block != NULL) { *width_depends_on_containing_block = used_length_provider.depends_on_containing_block(); } - return *used_length_provider.used_length(); + return used_length_provider.used_length(); } base::Optional<LayoutUnit> GetUsedHeightIfNotAuto(
diff --git a/src/cobalt/layout/used_style.h b/src/cobalt/layout/used_style.h index 6aede9f..f2a859a 100644 --- a/src/cobalt/layout/used_style.h +++ b/src/cobalt/layout/used_style.h
@@ -395,10 +395,10 @@ const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style, const SizeLayoutUnit& containing_block_size, bool* width_depends_on_containing_block); -LayoutUnit GetUsedMinHeight( +base::Optional<LayoutUnit> GetUsedMinHeightIfNotAuto( const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style, const SizeLayoutUnit& containing_block_size); -LayoutUnit GetUsedMinWidth( +base::Optional<LayoutUnit> GetUsedMinWidthIfNotAuto( const scoped_refptr<const cssom::CSSComputedStyleData>& computed_style, const SizeLayoutUnit& containing_block_size, bool* width_depends_on_containing_block);
diff --git a/src/cobalt/layout/used_style_test.cc b/src/cobalt/layout/used_style_test.cc index 267fea5..f19fa22 100644 --- a/src/cobalt/layout/used_style_test.cc +++ b/src/cobalt/layout/used_style_test.cc
@@ -526,7 +526,7 @@ EXPECT_EQ(*used_width, LayoutUnit(25.0f)); } -TEST(UsedStyleTest, UsedMaxHeightNoneDependsOnContainingBlock) { +TEST(UsedStyleTest, UsedMaxHeightNone) { scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style( new cssom::MutableCSSComputedStyleData()); computed_style->set_max_height(cssom::KeywordValue::GetNone()); @@ -598,14 +598,25 @@ EXPECT_EQ(*used_max_width, LayoutUnit(25.0f)); } +TEST(UsedStyleTest, UsedMinHeightAuto) { + scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style( + new cssom::MutableCSSComputedStyleData()); + computed_style->set_min_height(cssom::KeywordValue::GetAuto()); + SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f)); + auto used_min_height = + GetUsedMinHeightIfNotAuto(computed_style, containing_block_size); + EXPECT_FALSE(used_min_height); +} + TEST(UsedStyleTest, UsedMinHeightPercentDependsOnContainingBlockHeight) { scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style( new cssom::MutableCSSComputedStyleData()); computed_style->set_min_height(new cssom::PercentageValue(0.25f)); SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f)); auto used_min_height = - GetUsedMinHeight(computed_style, containing_block_size); - EXPECT_EQ(used_min_height, LayoutUnit(100.0f)); + GetUsedMinHeightIfNotAuto(computed_style, containing_block_size); + EXPECT_TRUE(used_min_height); + EXPECT_EQ(*used_min_height, LayoutUnit(100.0f)); } TEST(UsedStyleTest, UsedMinHeightLengthValue) { @@ -615,8 +626,21 @@ new cssom::LengthValue(25.0f, cssom::kPixelsUnit)); SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f)); auto used_min_height = - GetUsedMinHeight(computed_style, containing_block_size); - EXPECT_EQ(used_min_height, LayoutUnit(25.0f)); + GetUsedMinHeightIfNotAuto(computed_style, containing_block_size); + EXPECT_TRUE(used_min_height); + EXPECT_EQ(*used_min_height, LayoutUnit(25.0f)); +} + +TEST(UsedStyleTest, UsedMinWidthAutoDoesNotDependOnContainingBlockWidth) { + scoped_refptr<cssom::MutableCSSComputedStyleData> computed_style( + new cssom::MutableCSSComputedStyleData()); + computed_style->set_min_width(cssom::KeywordValue::GetAuto()); + SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f)); + bool depends_on_containing_block = false; + auto used_min_width = GetUsedMinWidthIfNotAuto( + computed_style, containing_block_size, &depends_on_containing_block); + EXPECT_FALSE(depends_on_containing_block); + EXPECT_FALSE(used_min_width); } TEST(UsedStyleTest, UsedMinWidthPercentDependsOnContainingBlockWidth) { @@ -625,10 +649,11 @@ computed_style->set_min_width(new cssom::PercentageValue(0.25f)); SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f)); bool depends_on_containing_block = false; - auto used_min_width = GetUsedMinWidth(computed_style, containing_block_size, - &depends_on_containing_block); + auto used_min_width = GetUsedMinWidthIfNotAuto( + computed_style, containing_block_size, &depends_on_containing_block); EXPECT_TRUE(depends_on_containing_block); - EXPECT_EQ(used_min_width, LayoutUnit(50.0f)); + EXPECT_TRUE(used_min_width); + EXPECT_EQ(*used_min_width, LayoutUnit(50.0f)); } TEST(UsedStyleTest, UsedMinWidthLengthValue) { @@ -638,10 +663,11 @@ new cssom::LengthValue(25.0f, cssom::kPixelsUnit)); SizeLayoutUnit containing_block_size(LayoutUnit(200.0f), LayoutUnit(400.0f)); bool depends_on_containing_block = false; - auto used_min_width = GetUsedMinWidth(computed_style, containing_block_size, - &depends_on_containing_block); + auto used_min_width = GetUsedMinWidthIfNotAuto( + computed_style, containing_block_size, &depends_on_containing_block); EXPECT_FALSE(depends_on_containing_block); - EXPECT_EQ(used_min_width, LayoutUnit(25.0f)); + EXPECT_TRUE(used_min_width); + EXPECT_EQ(*used_min_width, LayoutUnit(25.0f)); } TEST(UsedStyleTest, UsedHeightAutoDependsOnContainingBlock) {
diff --git a/src/cobalt/layout_tests/layout_benchmarks.cc b/src/cobalt/layout_tests/layout_benchmarks.cc deleted file mode 100644 index c8fbb43..0000000 --- a/src/cobalt/layout_tests/layout_benchmarks.cc +++ /dev/null
@@ -1,332 +0,0 @@ -// Copyright 2015 The Cobalt Authors. All Rights Reserved. -// -// 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 <memory> - -#include "base/strings/string_util.h" -#include "base/synchronization/waitable_event.h" -#include "cobalt/base/event_dispatcher.h" -#include "cobalt/cssom/viewport_size.h" -#include "cobalt/dom/benchmark_stat_names.h" -#include "cobalt/layout/benchmark_stat_names.h" -#include "cobalt/layout_tests/layout_snapshot.h" -#include "cobalt/layout_tests/test_parser.h" -#include "cobalt/math/size.h" -#include "cobalt/renderer/pipeline.h" -#include "cobalt/renderer/renderer_module.h" -#include "cobalt/renderer/submission.h" -#include "cobalt/system_window/system_window.h" -#include "cobalt/trace_event/benchmark.h" -#include "url/gurl.h" - -using cobalt::cssom::ViewportSize; - -namespace cobalt { -namespace layout_tests { - -namespace { -const int kViewportWidth = 1920; -const int kViewportHeight = 1080; - -const ViewportSize kViewSize(kViewportWidth, kViewportHeight); - -// The RendererBenchmarkRunner sets up an environment where we can control -// the number of benchmark samples we acquire from the renderer by counting -// each time the renderer submit complete callback is made. It also manages -// the skipping of the first frame to avoid the first frame outlier. -class RendererBenchmarkRunner { - public: - RendererBenchmarkRunner() - : done_gathering_samples_( - base::WaitableEvent::ResetPolicy::MANUAL, - base::WaitableEvent::InitialState::NOT_SIGNALED), - system_window_(new system_window::SystemWindow( - &event_dispatcher_, kViewSize.width_height())) { - // Since we'd like to measure the renderer, we force it to rasterize each - // frame despite the fact that the render tree may not be changing. - renderer::RendererModule::Options renderer_options; - renderer_options.submit_even_if_render_tree_is_unchanged = true; - renderer_module_.emplace(system_window_.get(), renderer_options); - } - - // Return the resource provider from the internal renderer so that it can - // be used during layout. - render_tree::ResourceProvider* GetResourceProvider() { - return renderer_module_->pipeline()->GetResourceProvider(); - } - - // Run the renderer benchmarks and perform the measurements. - void RunBenchmarks(const browser::WebModule::LayoutResults& layout_results, - int samples_to_gather) { - // Initialize our per-RunBenchmarks() state. - samples_to_gather_ = samples_to_gather; - done_gathering_samples_.Reset(); - - renderer::Submission submission_with_callback(layout_results.render_tree, - layout_results.layout_time); - submission_with_callback.on_rasterized_callbacks.emplace_back(base::Bind( - &RendererBenchmarkRunner::OnSubmitComplete, base::Unretained(this))); - - renderer_module_->pipeline()->Submit(submission_with_callback); - - done_gathering_samples_.Wait(); - - renderer_module_->pipeline()->Clear(); - } - - private: - // Called whenever the renderer completes a frame submission. This allows us - // to count how many frames have been submitted so we know when to stop (via - // the signaling of the done_gathering_samples_ event). - void OnSubmitComplete() { - --samples_to_gather_; - - // We wait for samples_to_gather + 1 submits to complete because we actually - // want samples_to_gather, but we skipped the first submit. - if (samples_to_gather_ <= 0) { - done_gathering_samples_.Signal(); - } - } - - int samples_to_gather_; - base::WaitableEvent done_gathering_samples_; - base::EventDispatcher event_dispatcher_; - - std::unique_ptr<system_window::SystemWindow> system_window_; - base::Optional<renderer::RendererModule> renderer_module_; -}; - -} // namespace - -class LayoutBenchmark : public trace_event::Benchmark { - public: - explicit LayoutBenchmark(const TestInfo& test_info); - ~LayoutBenchmark() override {} - - void Experiment() override; - void AnalyzeTraceEvent( - const scoped_refptr<trace_event::EventParser::ScopedEvent>& event) - override; - std::vector<trace_event::Benchmark::Result> CompileResults() override; - - private: - typedef base::hash_map<std::string, double> IntermediateResultsMap; - typedef base::hash_map<std::string, std::vector<double> > - FinalResultsSampleMap; - - void OnIterationComplete(); - static std::string FilePathToBenchmarkName(const base::FilePath& filepath); - - TestInfo test_info_; - - // During each iteration, we accumulate intermediate results by *adding* - // task times together. Only when the iteration is complete do we consider - // our result a sample. - IntermediateResultsMap intermediate_results_; - - // A list of accumulated intermediate results. The vectors in this map are - // pushed to at the end of each iteration. - FinalResultsSampleMap layout_samples_; - FinalResultsSampleMap renderer_samples_; - - // Is this our first iteration? - bool first_iteration_; - - // We setup the renderer benchmark runner first so that we can gain access - // to the resource provider and so that we can also benchmark the rendering - // of the layed out web pages. - RendererBenchmarkRunner renderer_benchmark_runner_; -}; - -LayoutBenchmark::LayoutBenchmark(const TestInfo& test_info) - : test_info_(test_info), first_iteration_(true) { - // Setup the name's benchmark based on the test entry file path. - set_name(FilePathToBenchmarkName(test_info_.base_file_path)); - set_num_iterations(10, base::Bind(&LayoutBenchmark::OnIterationComplete, - base::Unretained(this))); - - // Define the set of event names that we would like to watch for by - // initializing their map entries to the default constructed values (e.g. - // std::vector<double>()). - layout_samples_[layout::kBenchmarkStatLayout]; - layout_samples_[dom::kBenchmarkStatUpdateSelectorTree]; - layout_samples_[dom::kBenchmarkStatUpdateComputedStyles]; - layout_samples_[layout::kBenchmarkStatBoxGeneration]; - layout_samples_[layout::kBenchmarkStatUpdateCrossReferences]; - layout_samples_[layout::kBenchmarkStatUpdateUsedSizes]; - layout_samples_[layout::kBenchmarkStatRenderAndAnimate]; - renderer_samples_["AnimateNode::Apply()"]; - renderer_samples_["VisitRenderTree"]; - renderer_samples_["Skia Flush"]; -} - -std::string LayoutBenchmark::FilePathToBenchmarkName( - const base::FilePath& filepath) { - std::vector<base::FilePath::StringType> components; - filepath.GetComponents(&components); - - // Don't include the "benchmarks" directory as part of the benchmark name. - components.erase(components.begin()); - - return base::JoinString(components, "/"); -} - -void LayoutBenchmark::Experiment() { - base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - - // We prepare a layout_results variable where we place the results from each - // layout. We will then use the final layout_results as input to the renderer - // benchmark. - base::Optional<browser::WebModule::LayoutResults> layout_results; - - ViewportSize viewport_size = - test_info_.viewport_size ? *test_info_.viewport_size : kViewSize; - - // Set up a WebModule, load the URL and trigger layout to get layout benchmark - // results. - layout_results = - SnapshotURL(test_info_.url, viewport_size, - renderer_benchmark_runner_.GetResourceProvider(), - dom::ScreenshotManager::ProvideScreenshotFunctionCallback()); - - // Finally run the renderer benchmarks to acquire performance data on - // rendering. - renderer_benchmark_runner_.RunBenchmarks(*layout_results, 60); -} - -namespace { - -// Return true if the event has an ancestor with the specified named event. -bool HasAncestorEvent( - const scoped_refptr<trace_event::EventParser::ScopedEvent>& event, - const std::string& ancestor_event_string) { - scoped_refptr<trace_event::EventParser::ScopedEvent> ancestor_event = - event->parent(); - while (ancestor_event) { - if (ancestor_event->name() == ancestor_event_string) { - break; - } - ancestor_event = ancestor_event->parent(); - } - - return ancestor_event.get() != NULL; -} - -} // namespace - -void LayoutBenchmark::AnalyzeTraceEvent( - const scoped_refptr<trace_event::EventParser::ScopedEvent>& event) { - // Check if this is a layout sample. - if (event->name() == layout::kBenchmarkStatNonMeasuredLayout) { - // If this is a layout that should not be measured, use that as a signal - // that we are measuring partial layout, and clear out all measured data - // so far and start fresh for the eventual measured layout. - intermediate_results_.clear(); - return; - } - - FinalResultsSampleMap::iterator found_layout = - layout_samples_.find(event->name()); - if (found_layout != layout_samples_.end() && - !HasAncestorEvent(event, layout::kBenchmarkStatNonMeasuredLayout)) { - if (!base::ContainsKey(intermediate_results_, found_layout->first)) { - intermediate_results_[found_layout->first] = 0; - } - - double event_duration = event->in_scope_duration()->InSecondsF(); - intermediate_results_[found_layout->first] += event_duration; - - if (event->name() != layout::kBenchmarkStatLayout && - !HasAncestorEvent(event, layout::kBenchmarkStatLayout)) { - // If the event (which we have specifically requested to include in - // the benchmark results) does not fall under the scope of the official - // layout event, artificially increase the tracked layout time to include - // it. This way events can occur at any time, and the scoped layout - // event still gives us a way to measure unaccounted for time that we - // know is devoted to layout. - intermediate_results_[layout::kBenchmarkStatLayout] += event_duration; - } - } - - FinalResultsSampleMap::iterator found_renderer = - renderer_samples_.find(event->name()); - if (found_renderer != renderer_samples_.end()) { - found_renderer->second.push_back(event->in_scope_duration()->InSecondsF()); - } -} - -void LayoutBenchmark::OnIterationComplete() { - // Skip recording the results of the first iteration, since a few things - // may have been lazily initialized and we'd like to avoid recording that. - if (first_iteration_) { - for (FinalResultsSampleMap::iterator iter = renderer_samples_.begin(); - iter != renderer_samples_.end(); ++iter) { - iter->second.clear(); - } - } else { - // Save our finalized intermediate results into our finalized results, and - // then clear out our intermediate results for the next iteration. - for (FinalResultsSampleMap::iterator iter = layout_samples_.begin(); - iter != layout_samples_.end(); ++iter) { - if (base::ContainsKey(intermediate_results_, iter->first)) { - iter->second.push_back(intermediate_results_[iter->first]); - } - } - } - - first_iteration_ = false; - intermediate_results_.clear(); -} - -std::vector<trace_event::Benchmark::Result> LayoutBenchmark::CompileResults() { - std::vector<trace_event::Benchmark::Result> results; - for (FinalResultsSampleMap::iterator iter = layout_samples_.begin(); - iter != layout_samples_.end(); ++iter) { - results.push_back(trace_event::Benchmark::Result( - iter->first + " in-scope duration in seconds", iter->second)); - } - for (FinalResultsSampleMap::iterator iter = renderer_samples_.begin(); - iter != renderer_samples_.end(); ++iter) { - results.push_back(trace_event::Benchmark::Result( - iter->first + " in-scope duration in seconds", iter->second)); - } - return results; -} - -class LayoutBenchmarkCreator : public trace_event::BenchmarkCreator { - public: - std::vector<CreateBenchmarkFunction> GetBenchmarkCreators() override { - std::vector<CreateBenchmarkFunction> benchmarks; - - std::vector<TestInfo> benchmark_infos = EnumerateLayoutTests("benchmarks"); - for (std::vector<TestInfo>::const_iterator iter = benchmark_infos.begin(); - iter != benchmark_infos.end(); ++iter) { - benchmarks.push_back( - base::Bind(&LayoutBenchmarkCreator::CreateLayoutBenchmark, *iter)); - } - - return benchmarks; - } - - private: - static std::unique_ptr<trace_event::Benchmark> CreateLayoutBenchmark( - const TestInfo& test_info) { - return std::unique_ptr<trace_event::Benchmark>( - new LayoutBenchmark(test_info)); - } -}; -LayoutBenchmarkCreator g_benchmark_creator; - -} // namespace layout_tests -} // namespace cobalt
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg deleted file mode 100644 index fc5fc1c..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg deleted file mode 100644 index 0b1dda7..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg deleted file mode 100644 index 5abfe0e..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg deleted file mode 100644 index 429bdae..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg deleted file mode 100644 index 861caa9..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg deleted file mode 100644 index 75357d6..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg deleted file mode 100644 index e8b0b20..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg deleted file mode 100644 index 40edb65..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg b/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg deleted file mode 100644 index e686f50..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/layout_tests.txt b/src/cobalt/layout_tests/testdata/benchmarks/layout_tests.txt deleted file mode 100644 index c86c38e..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/layout_tests.txt +++ /dev/null
@@ -1 +0,0 @@ -youtube-2015-q3-initial-layout:1920x1080
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff deleted file mode 100644 index 6ab1ca1..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/DancingScript-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/DancingScript-Regular.woff deleted file mode 100644 index 71b2e76..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/DancingScript-Regular.woff +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/Handlee-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/Handlee-Regular.woff deleted file mode 100644 index c8f2418..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/Handlee-Regular.woff +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff deleted file mode 100644 index 1740d4f..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PTM55FT.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PTM55FT.woff deleted file mode 100644 index e7e96d1..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PTM55FT.woff +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff deleted file mode 100644 index c0e6a2f..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff deleted file mode 100644 index f5599f7..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/app-prod.css b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/app-prod.css deleted file mode 100644 index c78c202..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/app-prod.css +++ /dev/null
@@ -1 +0,0 @@ -.icon-cast_off:before{content:"\00e675"}.icon-cast_on:before{content:"\00e676"}.icon-mr_meh_android:before{content:"\00e677"}.icon-settings-signin-android:before{content:"\00e678"}.icon-settings-signout-android:before{content:"\00e679"}.icon-roku-back:before{content:"\00e674"}.icon-hats-happy:before{content:"\00e66f"}.icon-hats-neutral:before{content:"\00e670"}.icon-hats-sad:before{content:"\00e671"}.icon-hats-very-happy:before{content:"\00e672"}.icon-hats-very-sad:before{content:"\00e673"}.icon-search-keyboard:before{content:"\00e66e"}.icon-multiaudio:before{content:"\00e62d"}.icon-settings-check:before{content:"\00e66d"}.icon-settings-uncheck:before{content:"\00e659"}.icon-popular:before{content:"\00e66c"}.icon-airplane:before{content:"\00e600"}.icon-back:before{content:"\00e601"}.icon-check:before{content:"\00e602"}.icon-chevron-single:before{content:"\00e603"}.icon-delete:before{content:"\00e604"}.icon-desktop-arrowkeys:before{content:"\00e605"}.icon-desktop-delete:before{content:"\00e606"}.icon-desktop-esc:before{content:"\00e607"}.icon-desktop-g:before{content:"\00e608"}.icon-desktop-s:before{content:"\00e609"}.icon-dislike:before{content:"\00e60a"}.icon-double-chevron-right:before{content:"\00e60b"}.icon-edit:before{content:"\00e60c"}.icon-education:before{content:"\00e60d"}.icon-ellipsis:before{content:"\00e60e"}.icon-entertainment:before{content:"\00e60f"}.icon-exit:before{content:"\00e610"}.icon-film:before{content:"\00e611"}.icon-flag:before{content:"\00e612"}.icon-gaming:before{content:"\00e613"}.icon-guide-history:before{content:"\00e614"}.icon-guide-my-subs:before{content:"\00e615"}.icon-guide-purchases:before{content:"\00e616"}.icon-guide-social:before{content:"\00e617"}.icon-guide-what-to-watch:before{content:"\00e618"}.icon-home:before{content:"\00e619"}.icon-hourglass:before{content:"\00e61a"}.icon-key-delete:before{content:"\00e61b"}.icon-key-globe:before{content:"\00e61c"}.icon-key-space-sm:before{content:"\00e61d"}.icon-key-space:before{content:"\00e61e"}.icon-like:before{content:"\00e61f"}.icon-lips:before{content:"\00e620"}.icon-logo-lozenge:before{content:"\00e621"}.icon-lol:before{content:"\00e622"}.icon-lozenge:before{content:"\00e623"}.icon-mix:before{content:"\00e624"}.icon-music:before{content:"\00e625"}.icon-news:before{content:"\00e626"}.icon-people:before{content:"\00e627"}.icon-pets:before{content:"\00e628"}.icon-player-3d:before{content:"\00e629"}.icon-player-annotations:before{content:"\00e62a"}.icon-player-closedcaptions:before{content:"\00e62b"}.icon-player-ff:before{content:"\00e62c"}.icon-player-HD-circle:before{content:"\00e651"}.icon-player-HD:before{content:"\00e62e"}.icon-player-info:before{content:"\00e62f"}.icon-player-instantreplay:before{content:"\00e630"}.icon-player-less:before{content:"\00e631"}.icon-player-more:before{content:"\00e632"}.icon-player-mute:before{content:"\00e633"}.icon-player-next:before{content:"\00e634"}.icon-player-pause:before{content:"\00e635"}.icon-player-play:before{content:"\00e636"}.icon-player-prev:before{content:"\00e637"}.icon-player-replay:before{content:"\00e638"}.icon-player-rew:before{content:"\00e639"}.icon-player-settings:before{content:"\00e63a"}.icon-player-share:before{content:"\00e63b"}.icon-player-size-fullscreen:before{content:"\00e63c"}.icon-player-size-medium:before{content:"\00e63d"}.icon-player-size-minimize:before{content:"\00e63e"}.icon-player-stop:before{content:"\00e63f"}.icon-player-subtitles:before{content:"\00e640"}.icon-player-volume-45:before{content:"\00e641"}.icon-player-volume-48:before{content:"\00e642"}.icon-playlist:before{content:"\00e643"}.icon-playstation-circle:before{content:"\00e644"}.icon-playstation-square:before{content:"\00e645"}.icon-playstation-triangle:before{content:"\00e646"}.icon-playstation-x:before{content:"\00e647"}.icon-privacy-link:before{content:"\00e648"}.icon-privacy-locked:before{content:"\00e649"}.icon-privacy-public:before{content:"\00e64a"}.icon-related:before{content:"\00e64b"}.icon-remoteque:before{content:"\00e64c"}.icon-reward:before{content:"\00e64d"}.icon-rocket:before{content:"\00e64e"}.icon-search-clear:before{content:"\00e64f"}.icon-search:before{content:"\00e650"}.icon-settings-clear-cookies:before{content:"\00e652"}.icon-settings-clear-history:before{content:"\00e653"}.icon-settings-feedback:before{content:"\00e654"}.icon-settings-help:before{content:"\00e655"}.icon-settings-pair:before{content:"\00e656"}.icon-settings-phone:before{content:"\00e657"}.icon-settings-term:before{content:"\00e658"}.icon-speechbubble:before{content:"\00e65a"}.icon-sports:before{content:"\00e65b"}.icon-star:before{content:"\00e65c"}.icon-trash:before{content:"\00e65d"}.icon-trends:before{content:"\00e65e"}.icon-tv-dpad:before{content:"\00e65f"}.icon-upload-arrow:before{content:"\00e660"}.icon-upload:before{content:"\00e661"}.icon-watch-later:before{content:"\00e662"}.icon-wii-1:before{content:"\00e663"}.icon-wii-2:before{content:"\00e664"}.icon-wii-A:before{content:"\00e665"}.icon-wii-B:before{content:"\00e666"}.icon-wii-minus:before{content:"\00e667"}.icon-wii-plus:before{content:"\00e668"}.icon-wii-x:before{content:"\00e669"}.icon-wii-y:before{content:"\00e66a"}.icon-youtube-logo:before{content:"\00e66b"}.icon-youtube-unlimited-logo:before{content:"\00e67a"}@font-face{font-family:'Cutive Mono';src:url('/s/tv/fonts/CutiveMono-Regular.woff') format('woff')}@font-face{font-family:'PT Mono';src:url('/s/tv/fonts/PTM55FT.woff') format('woff')}@font-face{font-family:'PT Serif Caption';src:url('/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff') format('woff')}@font-face{font-family:'PT Sans Caption';src:url('/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff') format('woff')}@font-face{font-family:'Handlee';src:url('/s/tv/fonts/Handlee-Regular.woff') format('woff')}@font-face{font-family:'Dancing Script';src:url('/s/tv/fonts/DancingScript-Regular.woff') format('woff')}@font-face{font-family:'Marcellus SC';src:url('/s/tv/fonts/MarcellusSC-Regular.woff') format('woff')}body,html{font-size:100%;height:100%;margin:auto;overflow:hidden;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}input{font:inherit;margin:0;padding:0}body{background-color:#1c1a1a}p,ul,li{border:0;margin:0;outline:none;padding:0}ul{list-style:none}.focused,:focus{outline:0 solid}.hidden{display:none!important}.invisible{visibility:hidden}ul.list li{display:inline}ul.list.vertical li{display:block}.device-plugin{height:0;margin:0;position:absolute;visibility:hidden;width:0}#loader{}#leanback{height:100%}#app-markup{background-size:100% 100%;height:100%}#background{background-size:100% 100%;bottom:0;left:0;position:absolute;overflow:hidden;right:0;top:0}.limited-memory.sets-ui #app-markup{background-color:#283337}#app-markup.watch-state{background-color:#000!important}.wiiu #app-markup.watch-state{background-image:none!important}#playstation-buttons{display:none;position:absolute}#spinner{position:absolute;top:17.17em;width:100%}.browse-state .loading-indicator{display:none}.browse-state .fallback-loading-indicator{display:block}.opera #spinner{top:20em}.loading-indicator{height:5.33em;margin:0 auto;position:relative;width:5.33em}.dot{background-color:#cbcbcb;border-radius:50%;height:1.17em;position:absolute;width:1.17em}@-webkit-keyframes fade1{0%,100%{opacity:0}50%{opacity:1}}@-webkit-keyframes fade2{0%,100%{opacity:.25}37.5%{opacity:1}87.5%{opacity:0}}@-webkit-keyframes fade3{0%,100%{opacity:.5}25%{opacity:1}75%{opacity:0}}@-webkit-keyframes fade4{0%,100%{opacity:.75}12.5%{opacity:1}62.5%{opacity:0}}@-webkit-keyframes fade5{0%,100%{opacity:1}50%{opacity:0}}@-webkit-keyframes fade6{0%,100%{opacity:.75}37.5%{opacity:0}87.5%{opacity:1}}@-webkit-keyframes fade7{0%,100%{opacity:.5}25%{opacity:0}75%{opacity:1}}@-webkit-keyframes fade8{0%,100%{opacity:.25}12.5%{opacity:0}62.5%{opacity:1}}@-o-keyframes fade1{0%,100%{opacity:0}50%{opacity:1}}@-o-keyframes fade2{0%,100%{opacity:.25}37.5%{opacity:1}87.5%{opacity:0}}@-o-keyframes fade3{0%,100%{opacity:.5}25%{opacity:1}75%{opacity:0}}@-o-keyframes fade4{0%,100%{opacity:.75}12.5%{opacity:1}62.5%{opacity:0}}@-o-keyframes fade5{0%,100%{opacity:1}50%{opacity:0}}@-o-keyframes fade6{0%,100%{opacity:.75}37.5%{opacity:0}87.5%{opacity:1}}@-o-keyframes fade7{0%,100%{opacity:.5}25%{opacity:0}75%{opacity:1}}@-o-keyframes fade8{0%,100%{opacity:.25}12.5%{opacity:0}62.5%{opacity:1}}@keyframes fade1{0%,100%{opacity:0}50%{opacity:1}}@keyframes fade2{0%,100%{opacity:.25}37.5%{opacity:1}87.5%{opacity:0}}@keyframes fade3{0%,100%{opacity:.5}25%{opacity:1}75%{opacity:0}}@keyframes fade4{0%,100%{opacity:.75}12.5%{opacity:1}62.5%{opacity:0}}@keyframes fade5{0%,100%{opacity:1}50%{opacity:0}}@keyframes fade6{0%,100%{opacity:.75}37.5%{opacity:0}87.5%{opacity:1}}@keyframes fade7{0%,100%{opacity:.5}25%{opacity:0}75%{opacity:1}}@keyframes fade8{0%,100%{opacity:.25}12.5%{opacity:0}62.5%{opacity:1}}#dot1{-o-animation:fade8 .72s infinite ease;-webkit-animation:fade8 .72s infinite ease;animation:fade8 .72s infinite ease;left:0;top:2.09em}#dot2{-o-animation:fade7 .72s infinite ease;-webkit-animation:fade7 .72s infinite ease;animation:fade7 .72s infinite ease;left:.61em;top:.61em}#dot3{-o-animation:fade6 .72s infinite ease;-webkit-animation:fade6 .72s infinite ease;animation:fade6 .72s infinite ease;left:2.09em;top:0}#dot4{-o-animation:fade5 .72s infinite ease;-webkit-animation:fade5 .72s infinite ease;animation:fade5 .72s infinite ease;right:.61em;top:.61em}#dot5{-o-animation:fade4 .72s infinite ease;-webkit-animation:fade4 .72s infinite ease;animation:fade4 .72s infinite ease;right:0;top:2.09em}#dot6{-o-animation:fade3 .72s infinite ease;-webkit-animation:fade3 .72s infinite ease;animation:fade3 .72s infinite ease;bottom:.61em;right:.61em}#dot7{-o-animation:fade2 .72s infinite ease;-webkit-animation:fade2 .72s infinite ease;animation:fade2 .72s infinite ease;bottom:0;left:2.09em}#dot8{-o-animation:fade1 .72s infinite ease;-webkit-animation:fade1 .72s infinite ease;animation:fade1 .72s infinite ease;bottom:.61em;left:.61em}.spinner.transitions .dot{-o-animation:initial!important;-webkit-animation:initial!important;animation:initial!important;background:url(img/circle.png) no-repeat center;background-size:100%}.spinner.transitions.spin .loading-indicator{transition:transform 25s linear;transform:rotate(-7200deg)}.transitions #dot1{opacity:1}.transitions #dot2{opacity:0.875}.transitions #dot3{opacity:0.75}.transitions #dot4{opacity:0.625}.transitions #dot5{opacity:0.5}.transitions #dot6{opacity:0.375}.transitions #dot7{opacity:0.25}.transitions #dot8{opacity:0.125}.fallback-loading-indicator{color:#f1f1f1;display:none;font-size:1.8em;margin:2px auto 0 auto;text-align:center}.scrollbar{background-color:rgba(255,255,255,.1);height:100%;position:absolute;top:0;width:.1em}.scrollbar .handle{background-color:#f1f1f1;position:absolute;width:.1em}.application-message{color:#f1f1f1;font-size:1.8em;position:absolute;text-align:center;text-shadow:#000 .04em .04em;top:50%;width:100%}.debug-watermark{background-color:rgba(235,49,3,0.7);color:#0e0202;display:none;font-size:100%;left:0;padding:1em;position:absolute;bottom:0;width:70%}.debug-watermark.visible{display:block}.debug-console{background:rgba(0,0,0,.9);color:#fff;height:95%;overflow:scroll;padding:1em;position:absolute;right:0;top:0;width:40em;z-index:1}#player-controls .button,#player-controls .toggle-button{font-family:'youtube-icons';speak:none}.fps{position:absolute;right:0;bottom:0;text-align:center;padding-top:0.3em;width:5em;height:1.7em;background-color:#0f0;z-index:100}#html5-player-messages{display:none}#button-list>.icon-player-more:before{content:"\00e632"}.icon-player-play.toggle-selected:before{content:"\00e635"}#loader{z-index:1000}.sliding-highlighter,.pivot-sliding-highlighter{background:white;box-shadow:0 0 60px rgba(153,153,153,.3);display:none;height:26em;position:absolute;width:24em}#settings-items .sliding-highlighter{height:26.2em;width:24.2em}.horizontal-list.focused .sliding-highlighter,.video-uploads.focused .sliding-highlighter,#settings-items.focused .sliding-highlighter{display:block}.video-uploads .sliding-highlighter{height:20em;width:18em}.carousel .item:hover{background-color:#5a5a5a;cursor:pointer}.feed-title.preview{color:#f1f1f1;font-size:1.3em;height:1.3em;opacity:.7;padding-bottom:.6em;padding-left:1.9em}.feed-title .unread-count{background-color:rgba(187,0,0,.9);font-size:.6em;margin-left:.5em;padding:.05em .3em;position:relative;top:-0.265em}.prev-feed{height:3.6em;left:4%;position:absolute;top:5%}.next-feed{height:2em;left:4%;position:absolute;top:84%}.tile{background-color:#000;color:#666;height:26em;list-style:none;overflow:hidden;position:absolute;width:24em}.tile-focus-target{height:0;width:0}.tile-top{background-color:#000;height:50%;width:100%}.channel-top{height:62%;margin:5.25% 16%;width:68%}.channel-top .video-thumb,.tile-top .video-thumb{background-color:#252525;background-position:center;background-repeat:no-repeat;background-size:100%;height:100%}.browse-header-avatar.preloaded,.tile-top .video-thumb.preloaded{background:no-repeat center;background-color:#252525;background-image:url('img/icon-playbutton.png');background-size:auto}.auto-play-tile{overflow:visible}.post-play-title{font-size:1.4em;overflow:hidden;position:absolute;text-overflow:ellipsis;text-shadow:#000 .08em .08em;top:-1.8em;width:15.5em}.auto-play-tile .video-tile{top:0}.auto-play-tile .default-title,.auto-play-tile .next-up-title{color:#cccccc}.post-play-countdown{display:none}.countdown-active .post-play-countdown{color:#fff;display:block;font-size:5em;position:relative;text-align:center;text-shadow:#000 .06em .06em;top:14%}.playlist-tile.focused,.playlist-tile.focused:hover,.auto-play-tile.focused .video-tile,.auto-play-tile.focused:hover .video-tile,.recent-search-tile.focused,.recent-search-tile.focused:hover,.video-tile.focused,.video-tile.focused:hover{background-color:#f1f1f1}.item .overlay{display:none}.playlist-tile .overlay,.video-tile .overlay{background:#000;display:block;height:53%;margin-left:56%;margin-top:-57.5%;opacity:.8;width:45%}.playlist-tile.focused .overlay,.video-tile.focused .overlay{color:#f1f1f1}.playlist-tile .overlay strong{font-size:1.75em;font-weight:normal}.playlist-tile .overlay .count,.video-tile .overlay .count{font-size:1.5em;line-height:1.2em;padding-top:1.7em;text-align:center}.playlist-tile .overlay .icon,.video-tile .overlay .icon{font-family:'youtube-icons';font-size:3em;height:50%;overflow:hidden;padding:.2em;text-align:center}.tile-bottom{height:50%;padding:.25em 0 0 1em;width:23em}.channel-bottom{height:25%;margin-top:2.65em;width:100%}.channel-bottom .title,.tile-bottom .title{color:#999;font-size:1.7em;height:2.45em;line-height:1.25em;margin:.6em .6em 0 0;overflow:hidden;text-align:left;white-space:normal}.channel-bottom .title{height:1.2em;margin:0;padding:0 .6em;text-align:center;text-overflow:ellipsis;white-space:nowrap}.tile.selected.focused .tile-bottom{color:#222}.tile.selected.focused .channel-bottom .details,.tile.selected.focused .tile-bottom .details{color:#999}.tile.selected.focused .channel-bottom .title,.tile.selected.focused .tile-bottom .title{color:#444}.channel-tile .channel-top .decoration{margin-top:-19%;text-align:right;width:97%}.video-tile .tile-top .decoration{margin-top:-2em;text-align:right;width:97.3%}.channel-top .badge,.tile-top .badge,.tile-top .duration{background:rgba(0,0,0,.7);border-radius:0.1em;color:#fff;display:inline-block;font-size:1.4em;padding:0em .1em}.tile-top .badge,.tile-top .duration{text-transform:uppercase}.tile-top .live-badge{background-color:rgba(230,33,23,.8);border:0;color:#fff}.playlist-tile:hover,.video-tile:hover{background-color:#222}.channel-tile .details,.playlist-tile .details,.recent-search-tile .details,.video-tile .details{color:#999;font-size:1.3em;font-weight:300;height:40%;overflow:hidden;padding:0;white-space:normal;word-break:break-all}.channel-tile .details{text-align:center}.playlist-tile .details,.recent-search-tile .details,.video-tile .details{margin:.7em 0em 0em}.custom-playlist-image-tile .tile-top .video-thumb{background-position-x:0%;background-repeat:no-repeat;background-size:56.25%}.playlist-tile.focused .details,.recent-search-tile.focused .details,.video-tile.focused .details{color:#666}.playlist-tile .details .by,.recent-search-tile .results,.video-tile .details .by{height:1.4em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.playlist-tile .details .views,.video-tile .details .views{display:inline-block;padding-right:1.5em}.playlist-tile .details .views:empty,.video-tile .details .views:empty{display:none}.action-tile{border:2px rgba(255,255,255,0.1) solid;color:#fff;height:26em;overflow:visible}.action-tile.focused,.channel-tile.focused{background-color:#fff;color:#222}.action-tile .content{height:26em;white-space:normal}.video-tile .live-start-time{display:inline-block;vertical-align:middle}.tile-top .count-overlay{background:rgba(0,0,0,0.75);font-size:1.4em;height:100%;position:absolute;right:0;text-align:center;top:0;width:30%}.tile-top .count-overlay .video-count{display:block;font-size:2.2em;font-weight:bold;line-height:.8em;margin-top:1.6em}.action-tile .title{font-size:2.4em;height:24%;overflow:hidden;padding-top:0.5em;text-align:center;text-overflow:ellipsis;text-transform:uppercase;white-space:normal}.action-tile .long-title{font-size:2em;text-align:center;white-space:normal}.action-tile .description,.action-tile .remote-pair-text,.action-tile .remote-reset-help{color:#fff;font-size:1.4em;opacity:0;padding:0.5em;text-align:center;white-space:normal}.action-tile.focused .description,.action-tile.focused .remote-pair-text,.action-tile.focused .remote-reset-help,.action-tile.focused .sign-out-username{opacity:1}.action-tile .sign-out-username{font-size:1.7em;margin:1em auto;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap;width:80%}.action-tile .remote-count{font-size:.4em;position:absolute;top:40%;width:100%}.action-tile .remote-standing{display:inline-block;font-size:1.4em;margin:.2em auto;padding:.8em .4em .1em}.action-tile .remote-reset-help{height:2.7em}.action-tile .status{font-size:2em;text-align:center}.row-playing{display:none}.action-tile .large-action-icon{font-family:'youtube-icons';font-size:11em;margin-top:0;text-align:center;width:100%}.action-tile .sign-out-user-icon{background-size:cover;border-radius:20em;height:9em;margin:0 auto;width:9em}.action-tile .search-tile .description{font-size:1.4em;margin-top:2em;position:inherit;text-align:center}.large-action-icon.icon-guide-history{font-size:8em;margin-top:0.2em}.toggle-tile .icon{margin-top:0}.toggle-tile .content .title{height:12%;white-space:nowrap}.toggle-tile .label{font-size:1.8em;max-height:13%;text-align:center;width:100%}.selected .icon-search,.tile.selected .icon-search-clear{color:#222}.exp-densityBrowse .horizontal-list>.content{font-size:100%}.exp-densityBrowse .horizontal-list .no-content-message{display:none}.exp-densityBrowse .horizontal-list .pivot-sliding-highlighter{background:transparent;border:.5em #fff solid;box-shadow:.083em .083em .75em .167em #000 inset;height:7.5em;margin-left:-.4em;margin-top:-.4em;pointer-events:none;width:13.8em}.exp-densityBrowse .horizontal-list.focused .pivot-sliding-highlighter{display:block}.exp-densityBrowse .horizontal-list.focused.channel-selected .pivot-sliding-highlighter{border-radius:50%;height:7.5em;-moz-transform:translateX(3.2em);-o-transform:translateX(3.2em);-webkit-transform:translateX(3.2em);transform:translateX(3.2em);width:7.5em}.exp-densityBrowse .browse-sets .action-tile,.exp-densityBrowse .horizontal-list .channel-tile,.exp-densityBrowse .horizontal-list .video-tile{height:14em;width:14em}.exp-densityBrowse .shelf .horizontal-list .channel-tile,.exp-densityBrowse .shelf .horizontal-list .video-tile,.exp-densityBrowse .shelf .horizontal-list .channel-tile.selected,.exp-densityBrowse .shelf .horizontal-list .video-tile.selected{opacity:.5}.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile,.exp-densityBrowse .shelf.selected .horizontal-list .video-tile,.exp-densityBrowse .horizontal-list .channel-tile,.exp-densityBrowse .horizontal-list .video-tile{opacity:.7}.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile.selected,.exp-densityBrowse .shelf.selected .horizontal-list .video-tile.selected,.exp-densityBrowse .horizontal-list .channel-tile.selected,.exp-densityBrowse .horizontal-list .video-tile.selected,.exp-densityBrowse .horizontal-list .auto-play-tile.selected .video-tile,.limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile,.limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile,.limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile.selected,.limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile.selected,.limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .channel-tile,.limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .video-tile,.limited-animation .exp-densityBrowse .horizontal-list .channel-tile,.limited-animation .exp-densityBrowse .horizontal-list .video-tile{opacity:1}.exp-densityBrowse .horizontal-list .tile-top{height:7.83em}.exp-densityBrowse .channel-top .badge,.exp-densityBrowse .tile-top .badge{font-size:1em;padding:.2em}.exp-densityBrowse .horizontal-list .tile-bottom,.exp-densityBrowse .horizontal-list .channel-bottom{height:4.25em;margin-top:.83em;padding:0;width:100%}.exp-densityBrowse .shelf .horizontal-list .tile-bottom,.exp-densityBrowse .shelf .horizontal-list .channel-bottom{display:none}.exp-densityBrowse .shelf.selected .horizontal-list .tile-bottom,.exp-densityBrowse .shelf.selected .horizontal-list .channel-bottom{display:block}.exp-densityBrowse .browse-sets .action-tile .description,.exp-densityBrowse .horizontal-list .tile-bottom .title,.exp-densityBrowse .horizontal-list .channel-bottom .title{font-size:1.16em;height:initial;line-height:1.25em;margin:0;max-height:2.5em;text-overflow:ellipsis}.exp-densityBrowse .horizontal-list .channel-bottom .title{white-space:normal}.exp-densityBrowse .horizontal-list .video-tile .details{color:#cdcdcd;font-size:.83em;height:initial;margin:.4em 0}.exp-densityBrowse .horizontal-list .video-tile .tile-top .decoration{display:none;line-height:1em;margin-top:0;-moz-transform:translateY(-100%);-o-transform:translateY(-100%);-webkit-transform:translateY(-100%);transform:translateY(-100%);width:100%}.exp-densityBrowse #search .tile-top .decoration,.exp-densityBrowse #post-play-list .tile-top .decoration,.exp-densityBrowse .shelf.selected .horizontal-list .tile-top .decoration{display:block}.exp-densityBrowse .horizontal-list .video-tile .tile-top .badge{border-radius:0}.exp-densityBrowse .horizontal-list .video-tile .tile-top .duration{background:rgba(0,0,0,.5);font-size:1em;font-weight:bold;padding:.5em}.exp-densityBrowse .horizontal-list .channel-bottom .details{display:none}.exp-densityBrowse .horizontal-list .video-tile .details .views,.exp-densityBrowse .horizontal-list .video-tile .details .age{display:inline-block}.exp-densityBrowse .horizontal-list .video-tile .details .views{padding-right:.5em}.sets-ui .exp-densityBrowse .horizontal-list .channel-tile.selected .channel-bottom>.title,.sets-ui .exp-densityBrowse .horizontal-list .auto-play-tile.selected .tile-bottom>.title,.sets-ui .exp-densityBrowse .horizontal-list .video-tile.selected .tile-bottom>.title{color:#fff}.exp-densityBrowse .video-tile .overlay{height:7.83em;margin-left:60%;margin-top:-7.83em;width:40%}.exp-densityBrowse .video-tile .overlay .count{font-size:1em;line-height:1em;padding-top:1.5em}.exp-densityBrowse .video-tile .overlay .icon{font-size:2em;padding:0}.exp-densityBrowse .horizontal-list .channel-top{height:7.83em;margin:0 auto;width:7.83em}.exp-densityBrowse .horizontal-list .channel-top .video-thumb{border-radius:50%}.exp-densityBrowse .browse-sets .shelf>.title{font-size:1em;margin-bottom:.9em;margin-top:0}.exp-densityBrowse .browse-sets .shelf>.title .main{font-size:1.5em}.exp-densityBrowse .browse-sets .shelf>.title .annotation{font-size:1em}.exp-densityBrowse .browse-sets .shelf>.title{color:#cdcdcd}.engaged.exp-densityBrowse .channel-tile .voice-command,.engaged.exp-densityBrowse .video-tile .voice-command{font-size:1em;line-height:1em;margin-top:-2em}.limited-animation.sets-ui .exp-densityBrowse .video-tile:hover:not(.focused),.limited-animation.sets-ui .exp-densityBrowse .channel-tile:hover:not(.focused),.sets-ui .exp-densityBrowse .carousel .item:hover,.sets-ui .exp-densityBrowse .carousel .auto-play-tile:hover,.sets-ui .exp-densityBrowse .carousel .channel-tile:hover{background-color:inherit!important;opacity:1}.exp-densityBrowse .browse-sets .action-tile{border:none}.exp-densityBrowse .browse-sets .action-tile .content{height:7.83em;margin-bottom:.83em}.exp-densityBrowse .browse-sets .action-tile .title{display:none}.exp-densityBrowse .browse-sets .action-tile .large-action-icon{background-color:#232323;color:#fff;font-size:6em;height:1.3em;line-height:1.3em}.exp-densityBrowse .browse-sets .action-tile .description{opacity:inherit;padding:0}.exp-densityBrowse .auto-play-tile{height:14em;width:14em}.exp-densityBrowse .post-play-countdown{top:7%}.limited-animation .exp-densityBrowse .browse-content .list{margin-left:-7.5em;width:inherit}.limited-animation .exp-densityBrowse .browse-content .shelf>.title{margin-left:7.5em}.limited-animation .exp-densityBrowse .browse-content .list .shelf:nth-child(1){margin-bottom:6.5em}.limited-animation .exp-densityBrowse .browse-content .list .shelf{margin-bottom:-.1em}.limited-animation.sets-ui .exp-densityBrowse .channel-tile:not(.focused),.limited-animation.sets-ui .exp-densityBrowse .video-tile:not(.focused){background-color:inherit}.limited-animation .exp-densityBrowse .channel-tile.focused,.limited-animation .exp-densityBrowse .video-tile.focused{background-color:inherit}.limited-animation .exp-densityBrowse .video-tile{margin-right:.5em}.limited-animation .exp-densityBrowse .video-tile .overlay{height:7.03em;margin-left:8em;margin-top:-7.43em;width:5.6em}.limited-animation .exp-densityBrowse .video-tile .tile-top{background:inherit;height:7.03em;padding:.4em;width:13.2em}.limited-animation .exp-densityBrowse .channel-tile{margin-right:.5em}.limited-animation .exp-densityBrowse .channel-tile .channel-top{height:6.83em;padding:.4em;width:6.83em}.limited-animation .exp-densityBrowse .video-tile.focused .tile-top{background:#fff}.limited-animation .exp-densityBrowse .channel-tile.focused .channel-top{background:#fff;border-radius:50%}.limited-animation .exp-densityBrowse .search .placeholder-tile,.limited-animation .exp-densityBrowse .browse-content .list .placeholder-tile{height:14em;margin-right:.5em;width:14em}#dialog.remote-reset-dialog>.title{font-size:3em;padding-bottom:.5em}#dialog.remote-reset-dialog .buttons{bottom:.5em;position:absolute}#dialog.remote-reset-dialog{left:0;position:absolute;white-space:normal}.remote-reset-dialog #dialog-view{color:#aaa;font-size:1.8em;padding-top:0.5em}.connection-instructions{padding-top:.5em;font-size:2em}.text-dialog .connection-instructions{font-size:1.3em}.browse-sets-state .login-dialog{margin-top:5em}#search .pairing .pairing-content>*,#dialog .pairing .pairing-content>*{display:inline-block}#search .pairing .pairing-content .step2,#dialog .pairing .pairing-content .step2{display:block}#search .dial-upsell .connection-steps .no-dial-connect-step1,#search .manual-connect .connection-steps .with-dial-connect-step1{display:none}.connection-instructions .step1,.connection-instructions .step2,.qr-code .scan,.pairing .connected-header,.remote-reset-dialog .connected-header{color:#aaa;font-size:.7em}.connection-instructions .pair-url,.connection-instructions .pair-code{color:#f1f1f1}.connection-instructions .step2{margin-top:2em}.pairing .qr-code,.pairing .connected-list{display:inline-block;margin-left:1em;vertical-align:top}.pairing .dial-upsell{color:#aaa;display:inline-block;font-size:95%;overflow:hidden;padding-left:2em;padding-top:0.8em;text-align:initial;vertical-align:top;white-space:normal;width:16em}.pairing .cast-icon{background:url(img/cast_disconnected_blue.png) no-repeat center;background-size:contain;display:inline-block;height:1em;margin:.1em .3em;vertical-align:middle;width:1em}.pairing .qr-code .scan{margin-bottom:.5em;white-space:normal;width:5em}.pairing .qr-code img{height:5.1em;width:5.1em}.pairing .icon-settings-pair,.login-dialog .icon-settings-pair{background-image:none;display:inline-block;font:5em 'youtube-icons';height:1em;margin-top:.1em;width:1.4em}.remote-reset-dialog .connected-header,.pairing .connected-header{margin-bottom:.3em}.remote-reset-dialog .devices,.pairing .devices{list-style:none;font-size:1.5em;color:#f1f1f1}.remote-reset-dialog .devices>div,.pairing .devices>div{display:block;height:1.5em;line-height:1.5em;overflow:hidden;padding-left:1.5em;text-overflow:ellipsis;white-space:nowrap;width:11.5em}.remote-reset-dialog .devices .connected:before{background-position:0 100%}.remote-reset-dialog .devices .connected{color:#f1f1f1}#search{bottom:0;color:#f1f1f1;left:0;overflow:hidden;position:absolute;right:0;text-align:center;top:0}.watch-state #search{left:0}#search>.controls{left:8em;margin-right:18em;position:absolute;right:2.5em;text-align:left;top:2.5em}#search-text-box{background-color:#e1e1e1;font-size:1.6em;height:100%;margin:0 auto;overflow:hidden;position:relative}#search-text-box>.icon-search{display:none}#search-input{background:none;border:none;color:#111;height:100%;padding-left:.5em;width:100%}#search-input:disabled{color:#111}#search-query{color:#111;height:100%;overflow:hidden;padding-left:.5em;padding-top:.3em;position:absolute;text-overflow:ellipsis;white-space:pre;width:95%}#search-suggestions{font-size:1.2em;position:relative;display:inline-block;left:0;width:100%}.search-state #spinner{top:26em}#suggest-list{overflow:hidden}#suggest-list>div{border-radius:1px;color:#e1e1e1;display:inline-block;padding:.2em .5em}#search-keyboard{font-size:1em;text-align:left;width:65%}#search-suggestions,#search-keyboard,#letter-suggest{white-space:nowrap}#search-keyboard,#letter-suggest{z-index:1}#keyboard-grid{display:inline-block;font-size:1.6em;margin:0 auto;overflow:hidden;text-align:left}#keyboard-grid,#keyboard-spacebar{color:#a3a3a3}#keyboard-grid .button{border-radius:1px;display:inline-block;margin:.3em .6em .3em 0;padding:0 .1em;text-align:center;text-transform:uppercase;width:1em;vertical-align:top}#keyboard-grid .list{text-align:left;text-shadow:none}#search-keyboard #keyboard-grid .icon-key-delete.button{font-family:'youtube-icons';font-size:.7em;line-height:1.2em;margin-left:2.25em;padding:.25em;width:2.25em}#keyboard-spacebar{border-radius:1px;display:inline-block;font-family:'youtube-icons';font-size:1.44em;margin:.1em 7em 0 2.1em;padding:.1em;text-align:left}#search-keyboard #keyboard-grid .clear-query-tile.button{font-size:.7em;margin-left:2.25em;padding:.25em;text-transform:uppercase;width:auto}#keyboard-grid .icon-key-globe{font-family:'youtube-icons';margin:.25em 0 .25em 1.6em;padding:.1em;width:1.2em}#search-keyboard .button.focused{background-color:#e1e1e1;color:#212121}#letter-suggest{font-size:1.6em;position:fixed;text-align:center;width:1.2em}.letter-suggest-visible #keyboard-grid .list.selected .button.selected:not(.focused){background-color:rgba(153,153,153,.85);color:#000;text-shadow:none}#keyboard-grid .button.numbers-toggle-tile{font-size:.75em;padding:.22em;margin:.25em 0 0 2.1em;width:auto}#search .pairing .icon-settings-pair{display:none}#search .search-message{display:inline-block;margin-left:2em;margin-top:1.5em;vertical-align:top;white-space:normal;width:50%}#search .search-pairing{background-color:rgba(0,0,0,.3);bottom:0;display:inline-block;left:5em;padding:2em 2.5em 4em;position:absolute;text-align:left;text-shadow:-1px 1px 2px black;width:100%}.limited-animation #search .search-pairing{background-color:#000}#search .search-pairing .search-img{background-image:url(img/pair_promo.png);background-size:cover;display:inline-block;height:11em;width:11em}#search .search-pairing .title{font-size:1.9em}#search .search-pairing .connection-instructions{font-size:1.6em}#search .search-pairing .dial-upsell-content{color:#aaa}#search .search-pairing .manual-connect-content .connection-steps{padding:0}#search .search-pairing .manual-connect-content .connection-steps .pair-code,#search .search-pairing .manual-connect-content .connection-steps .pair-url{display:block}#search .search-pairing .manual-connect-content .connection-steps .step2{margin-top:1em}#search .search-pairing .manual-connect-content .connection-steps .label,#search .search-pairing .manual-connect .dial-upsell-content,#search .search-pairing .dial-upsell .manual-connect-content{display:none}#search .pairing .no-dial-connect-step1,#search .pairing .no-dial-connect-step2{display:inline-block}#search .pairing .no-dial-connect-step2{margin-left:2em}#search .pairing .connection-steps{text-align:left}#search .pairing .connected-list,#search .pairing .qr-code-wrapper{display:none}#search.hide-input .search-pairing{margin-top:8em}#letter-suggest div{background-color:rgba(153,153,153,.85);color:rgba(0,0,0,.8);height:1.4em;text-shadow:none}#letter-suggest .focused{color:#f1f1f1}#transliteration-container{display:none}#search-keyboard.transliterable #transliteration-container{display:block}#transliteration .list{font-size:2em;height:1.2em;margin:0 auto;overflow:hidden;padding:.2em 0;text-align:center;width:77%}#transliteration .list>div{display:inline;padding:0 .5em;position:relative}#suggest-list>div.focused,#transliteration .list .focused{background-color:#fefefe;color:#212121}#transliteration .button:hover{background-color:rgba(153,153,153,.4)}#transliteration .button:hover,#search-keyboard .button:hover{cursor:pointer}#search .horizontal-list>.content{text-align:left}.limited-animation.sets-ui #search .horizontal-list>.content{margin-left:-21.8em;width:126em}#search .horizontal-list{left:7.5em;height:inherit;position:absolute;right:0;top:38%;-o-transform:translateY(7.5em);-webkit-transform:translateY(7.5em);transform:translateY(7.5em);-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s;width:initial}#search.input-collapsed .horizontal-list{-o-transform:none!important;-webkit-transform:none!important;transform:none!important}#search-keyboard{-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s;transform-origin:top}#search-keyboard.hidden{display:block!important;opacity:0;-o-transform:scaleY(.5);-webkit-transform:scaleY(.5);transform:scaleY(.5)}#search #search-text-entry{height:2.4em}#search #search-suggestions,#search #search-text-entry{background-color:rgba(0,0,0,0);padding-top:.25em;-o-transform-origin:top;-webkit-transform-origin:top;transform-origin:top;-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s}.limited-animation #search .horizontal-list,.limited-animation #search #search-suggestions,.limited-animation #search #search-text-entry,.limited-animation #search #search-keyboard{-o-transition:none;-webkit-transition:none;transition:none}#search-text-entry{padding-bottom:.4em}#search-text-entry,#text-box-background{height:3em}#keyboard-icon{display:none;font-family:'youtube-icons';font-size:1.2em;padding-bottom:.4em;text-align:center;vertical-align:bottom;width:2em}.input-collapsed #keyboard-icon{display:inline-block}#search-text-entry .suggestions-container{white-space:nowrap;overflow:hidden;height:2.4em}.exp-densityBrowse #search .horizontal-list{font-size:100%;height:14em;top:35%;-moz-transform:translateY(8em);-o-transform:translateY(8em);-webkit-transform:translateY(8em);transform:translateY(8em)}.limited-animation .exp-densityBrowse #search .horizontal-list .list{margin-left:-14em}.exp-densityBrowse #search .horizontal-list .video-tile{height:14em}.exp-densityBrowse #search .horizontal-list .video-tile .details .views,.exp-densityBrowse #search .horizontal-list .video-tile .details .age{display:inline-block}.exp-densityBrowse #search .horizontal-list .video-tile .details .views{padding-right:.5em}.limited-animation.sets-ui .exp-densityBrowse #search .horizontal-list>.content{margin-left:0;width:inherit}#player{height:100%;width:100%}.watch-state #watch{display:block}.wiiu #watch{background-color:#000;height:100%}#player-facade{height:100%;position:absolute;width:100%}#player-video{height:100%}#watch,.dialog-focused .standard-caption-window,#caption-window-99,.countdowntimer,.ytp-cued-icon,.ytp-fallback,.html5-context-menu,.html5-dialog-holder,.html5-endscreen,.html5-info-bar,.html5-modal-panel,.html5-player-chrome,.html5-show-video-info-template,.html5-storyboard,.html5-text-button,.html5-video-player .hid,.html5-ypc-module,.player-actions-container,.video-ad-status-bar,.video-annotations,.html5-watermark,.video-fallback-content,.video-ads,.title-card.hidden{display:none}.html5-video-player{overflow:visible}.html5-video-info-panel{background-color:rgba(0,0,0,.7);color:#f1f1f1;display:none;margin:20%;position:absolute;top:0;z-index:1}.html5-video-info-panel-close{display:none}.html5-video-info-panel-content>div>div{display:inline-block;font-weight:bold;padding:0 .5em;text-align:right;width:10em}.ad-video{width:100%;height:100%}.ad-showing .video-ads{display:block;overflow:hidden}.ad-interrupting.tag-pool-enabled .html5-main-video{position:absolute;left:-1px;top:-1px;overflow:hidden;width:1px!important;height:1px!important}.html5-video-player .video-stream{position:absolute;top:0;left:0;display:block}.opera .video-stream{height:720px;width:1280px}.advertisement-info,.skip-ad-button{position:absolute;top:9.5em}.advertisement-info{left:12.5%;text-align:left;width:30%;overflow:hidden}.advertisement-info-top{height:3em}.advertisement-avatar{width:3em;height:3em;display:inline-block;margin-right:.4em;background-position:right center;background-repeat:no-repeat;background-size:contain}.advertisement-info-details{display:inline-block;vertical-align:top;width:79%}.advertisement-title,.advertisement-advertiser,.third-party{color:#fff;text-shadow:2px 1px #000;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.third-party{position:absolute;bottom:0}.advertisement-title{font-size:1.4em;line-height:1em;height:1.1em}.advertisement-advertiser{font-size:1.1em;line-height:1.3em;height:1.4em}.advertisement-info .ad-badge{background-color:#e6bc27;padding:1px 5px;text-shadow:none;border-radius:.15em;font-size:.9em;text-transform:capitalize}.skip-ad-button{right:12.5%;border-radius:.15em;background-color:rgba(0,0,0,.4);padding:.6em}.canskip.mdx-skip.skip-ad-button{height:4.0em;width:18em}.canskip.mdx-skip .skip-button-text{font-size:1.1em;height:3em;left:2.0em;line-height:1.5em;position:absolute;top:.7em;width:75%}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button .label,.skip-ad-button .label{font-size:1.1em;padding:0 1.4em;height:2.5em;line-height:2.5em;border-radius:.12em;cursor:pointer;background-color:rgba(0,0,0,0);color:#e1e1e1}.skip-ad-button.canskip.mdx-skip .label{height:3.7em}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip:hover .label,.skip-ad-button.canskip:hover .label{background-color:#fff;color:#212121;border-radius:.12em}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip.focused .label,.skip-ad-button.canskip.focused .label{background-color:#e1e1e1;color:#212121;border-radius:.12em}.skip-ad-button .skip-symbol{display:none;font-family:'youtube-icons'}.skip-ad-button.canskip .skip-symbol.icon-player-next{display:inline;font-size:1.3em;margin-left:.5em;vertical-align:middle}.exp-newMdxSkipButtonCast .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-cast_on{display:inline;font-size:2.5em;position:absolute;right:.7em;text-align:right;top:.5em;width:25%}.exp-newMdxSkipButtonPair .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-settings-pair{display:inline;font-size:4em;position:absolute;right:.4em;text-align:right;top:.3em;width:25%}.canskip.mdx-skip.skip-ad-button .skip-symbol.icon-player-next{display:none}#player-controls{text-align:center}#bottom-half{bottom:0;height:50%;position:absolute;width:100%}#transport-controls{background:-o-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));bottom:0;height:100%;position:absolute;-o-transition:-o-transform .25s,opacity .25s;-webkit-transition:-webkit-transform .25s,opacity .25s;transition:transform .25s,opacity .25s;width:100%}#transport-controls.hidden{display:block!important;opacity:0}.limited-animation #transport-controls.hidden{display:none!important}#transport-controls,#transport-controls.focused{display:block}.player-controls-widget{border:0;margin-top:8.4em}.fresh-transport-controls.seeking-forward .seeking-icon.icon-player-rew:before{content:"\00e62c"}.seeking-icon{bottom:3em;color:#fff;display:none;position:absolute;left:0;margin:0 auto;right:0}.seeking-icon span{display:none}.fresh-watch.watch-seeking .seeking-icon{display:block}.fresh-watch .title-card{background:-webkit-linear-gradient(top,rgba(0,0,0,.75),transparent);background:-o-linear-gradient(top,rgba(0,0,0,.75),transparent);background:linear-gradient(to bottom,rgba(0,0,0,.75),transparent);height:35.9%}#transport-controls.fresh-transport-controls{background:-webkit-linear-gradient(bottom,#000,transparent);background:-o-linear-gradient(bottom,#000,transparent);background:linear-gradient(to top,#000,transparent)}.fresh-watch .player-video-title{color:rgba(255,255,255,1);font-size:1.936em}.fresh-watch .player-meta .player-video-details{color:rgba(255,255,255,0.7);font-size:1.455em}.fresh-watch .pivot-shelf-list{margin-top:14.5em;padding-left:3.871em}#fresh-rows-container{border:0;color:#fff;margin-top:7.7em}.fresh-transport-controls .storyboards{position:absolute}.fresh-transport-controls .more-row,.fresh-transport-controls .main-row{margin-left:5%;width:95%}.fresh-transport-controls .button span,.fresh-transport-controls .toggle-button span{display:none;font-family:'roboto-regular';color:rgba(255,255,255,1)}.lang-case-sensitive .fresh-transport-controls span:first-letter{text-transform:uppercase}.fresh-transport-controls .button.disabled:hover,.fresh-transport-controls .toggle-button.disabled:hover{background-color:transparent}.fresh-transport-controls .button.disabled,.fresh-transport-controls .toggle-button.disabled{opacity:.45}.fresh-transport-controls .button.focused,.fresh-transport-controls .toggle-button.focused,.fresh-transport-controls .button:hover,.fresh-transport-controls .toggle-button:hover{background-color:rgba(255,255,255,.5);color:#fff}.fresh-transport-controls .button,.fresh-transport-controls .toggle-button,.seeking-icon{border-radius:4px;font-family:'youtube-icons';font-size:1.4em;height:1em;padding:.55em;speak:none;text-align:center;width:1em}.fresh-transport-controls .button,.fresh-transport-controls .toggle-button{color:rgba(255,255,255,.7);cursor:pointer;display:inline-block;position:relative}.fresh-transport-controls #transport-more-button:before{display:inline-block;left:19%;position:absolute;top:-9%}.fresh-transport-controls #transport-more-button{font-size:2em;height:.7em;margin-right:1.452em;padding:.385em;width:.7em}.fresh-transport-controls #transport-more-button span{color:#fff;display:inline-block;font-size:.485em;left:4.5em;position:absolute;text-align:left;top:1em;width:15em}.fresh-transport-controls #transport-more-button.top-row-active span{display:none}.fresh-transport-controls #transport-more-options-list{display:inline-block}.fresh-transport-controls .progress-bar{display:inline-block;height:3em;left:0;padding:0;position:relative;top:0;width:76.55%}.fresh-transport-controls.live-playback #play-pause-button{margin-right:1em}.fresh-transport-controls.live-playback .progress-bar{width:77.55%}.fresh-transport-controls.live-playback .live-indicator{display:inline-block;left:0;margin-left:1em;position:relative;top:0}.fresh-transport-controls #player-time-elapsed,.fresh-transport-controls .player-time-total{color:rgba(255,255,255,1);display:inline-block;font-size:1.3em;position:relative;text-align:center;top:0;width:8%}.fresh-transport-controls .more-row{margin-bottom:5px}.fresh-transport-controls .more-row .button,.fresh-transport-controls .more-row .toggle-button{margin-right:2.075em;vertical-align:top}.fresh-transport-controls .icon-like.toggle-selected,.fresh-transport-controls .icon-dislike.toggle-selected,.fresh-transport-controls .icon-player-closedcaptions.toggle-selected{color:#2793e6}.fresh-transport-controls .icon-logo-lozenge.toggle-selected{color:#f00}.fresh-transport-controls .more-row .button span,.fresh-transport-controls .more-row .toggle-button span{font-size:.692em;left:-3.45em;position:relative;top:-4.4em;width:8.3em}.fresh-transport-controls .more-row .button.focused span,.fresh-transport-controls .more-row .toggle-button.focused span,.fresh-transport-controls .more-row .button:hover span,.fresh-transport-controls .more-row .toggle-button:hover span{display:inline-block}.fresh-transport-controls .progress-bar .progress-bar-line div{height:.242em}.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-background{background-color:rgba(255,255,255,0.45)}.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-loaded{background-color:#fff}.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-played{background-color:#df2323}.fresh-transport-controls .progress-bar.ad-active .progress-bar-played{background-color:#e7bd00}.ypc-playback .fresh-transport-controls .progress-bar-line .progress-bar-played{background-color:#2793e6}.fresh-watch .ad-point-separator,.fresh-transport-controls .progress-bar .progress-bar-disc,.fresh-transport-controls.ad-active #player-time-elapsed,.fresh-transport-controls.ad-active .player-time-total{display:none}.fresh-transport-controls.ad-active .progress-bar{padding-left:1em;width:88%}.fresh-transport-controls.ad-active .more-row,.fresh-watch.watch-seeking .more-row{visibility:hidden}.fresh-watch .skip-ad-button,.fresh-watch .advertisement-info{top:6.7em}.fresh-watch .advertisement-info{left:5%}.fresh-watch .advertisement-info .advertisement-info-top{height:3.065em;position:relative}.fresh-watch .skip-ad-button{border-radius:4px;background-color:rgba(0,0,0,.5);padding:0;right:6%;z-index:1}.fresh-watch .skip-ad-button .label{color:#fff;font-size:1.13em;height:2.57em;line-height:2.57em;padding:0 1.3em}.fresh-watch .skip-ad-button .skip-symbol{font-size:1.1em}.fresh-watch .skip-ad-button.canskip:hover,.fresh-watch .skip-ad-button.canskip.focused{background-color:rgba(255,255,255,.5)}.fresh-watch .skip-ad-button.canskip:hover .label,.fresh-watch .skip-ad-button.canskip.focused .label{background:none;color:#fff}.fresh-watch .advertisement-info{color:#fff}.fresh-watch .advertisement-info .advertisement-advertiser{font-size:100%;height:1.4em;line-height:1.3em}.fresh-watch .advertisement-info .advertisement-advertiser>span{vertical-align:bottom}.fresh-watch .advertisement-info .advertisement-advertiser,.fresh-watch .advertisement-info .advertisement-title,.fresh-watch .advertisement-info .third-party{overflow:hidden;text-shadow:none;text-overflow:ellipsis;white-space:nowrap}.fresh-watch .advertisement-info .third-party{bottom:0;position:absolute;vertical-align:top;width:79%}.fresh-watch .advertisement-info .third-party>span{vertical-align:middle}.fresh-watch .advertisement-info .advertisement-title{font-size:1.35em;font-weight:bold;line-height:1em;height:1.1em;padding-bottom:1%;text-shadow:none}.fresh-watch .advertisement-info .ad-badge{background-color:#e7bd00;border-radius:.15em;font-size:.85em;font-weight:bold;padding:1px 7px;text-shadow:none;text-transform:capitalize}.fresh-watch .advertisement-info .remaining-duration,.fresh-watch .advertisement-info .ad-by{font-size:1.13em}.fresh-watch .advertisement-info .remaining-duration{padding:0 2%}.fresh-watch .advertisement-info .advertisement-avatar{background-repeat:no-repeat;background-size:contain;border-radius:50%;display:inline-block;height:3.065em;margin-right:1.4em;width:3.065em}.title-card{background:-o-linear-gradient(top,rgba(0,0,0,.9),rgba(0,0,0,.8),transparent);background:-webkit-linear-gradient(top,rgba(0,0,0,.9),rgba(0,0,0,.8),transparent);background:linear-gradient(to bottom,rgba(0,0,0,.9),rgba(0,0,0,.8),transparent);display:block;height:25%;position:absolute;top:0;-o-transition:-o-transform .25s,opacity .25s;-webkit-transition:-webkit-transform .25s,opacity .25s;transition:transform .25s,opacity .25s;width:100%}.ypc-playback .title-card{height:30%}.title-card.hidden{display:block!important;opacity:0}.limited-animation .title-card.hidden{display:none!important}.title-card .badges span{border:1px solid #ddd;border-radius:2px;display:inline-block;font-size:.9em;margin-left:1em;padding:0 .5em 0;text-transform:uppercase;vertical-align:middle}.title-card .badges span.live-badge{color:#fff;border:0;background-color:rgba(230,33,23,.8);margin-left:0}.selected-title .views{margin-top:-.6em}.player-meta{color:#f1f1f1;margin:2.6em 0 0 3.5em;white-space:nowrap;width:90%}.player-meta .user-details{position:absolute;right:5%}.player-meta .user-details>div{display:inline-block;vertical-align:top}.player-meta .user-details .avatar{background-size:cover;height:4em;width:4em}.player-meta .user-details .message{font-size:80%;margin:.2em 1em 0 1.1em;max-width:50%;overflow:hidden;text-overflow:ellipsis}.player-meta .player-video-text{display:inline-block;padding-left:1.5em;width:90%}.player-meta .player-video-details{font-size:1.5em;white-space:initial}.player-meta .player-video-details>div{margin:.2em 1em 0 0;vertical-align:top}.player-meta .player-video-details .username{max-width:45%;overflow:hidden;text-overflow:ellipsis}.player-meta .player-video-details .set-context{max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.player-meta .player-video-details .set-context,.player-meta .player-video-details .set-context-position,.player-meta .player-video-details .uploaded-date,.player-meta .player-video-details .view-count,.player-meta .player-video-details .badges,.player-meta .player-video-details .username{display:inline-block}.player-video-avatar{background-size:contain;border-radius:50%;display:inline-block;height:5.5em;vertical-align:top;width:5.5em}.player-video-title{font-size:2.4em;margin:-.1em 0 0 0;overflow:hidden;text-overflow:ellipsis}.quality-status{display:none;padding-top:.2em}.title-tray-inflated .quality-status{display:inline-block}.quality-status-hd-badge{background:#f1f1f1;border-radius:2px;color:#414141;font-size:.6em;font-weight:bold;padding:.125em .5em}.ypc-preview{display:none}.ypc-playback .ypc-preview{display:block}.player-controls #button-list .focused,.player-controls #button-list div:hover{-webkit-border-radius:.05em;color:#000}.player-controls #button-list .focused{background-color:#fff}.player-controls #button-list div:hover{background-color:#9d9495}.player-controls #button-list .button,.player-controls #button-list .toggle-button{display:inline-block;font-size:1.4em;height:1.3em;margin:1em 1em;padding-bottom:.4em;padding-top:.8em;top:0;width:2.3em}.player-controls #button-list .button span,.player-controls #button-list .toggle-button span{font-family:'roboto-regular';font-size:.7em;left:-10%;margin:.5em 0 0;width:120%;height:120%}.player-controls #button-list .button.spacer{visibility:hidden;cursor:auto}#transport-controls.focused .player-controls #button-list div{color:#fff}#transport-controls.focused .player-controls #button-list .focused{color:#222}.player-controls #button-list div{color:#aaa;cursor:pointer;vertical-align:middle}#transport-controls.ad-active .player-controls #button-list div.disabled{visibility:hidden}#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.disabled{visibility:visible;opacity:1}.player-controls #button-list div.disabled:hover{background-color:transparent;color:#fff}.player-controls #button-list div.focused{opacity:1}.player-controls #button-list div.disabled{opacity:.2}.player-controls #button-list .icon-player-closedcaptions.toggle-selected,.player-controls #button-list .icon-like.toggle-selected,.player-controls #button-list .icon-dislike.toggle-selected{color:#2793e6!important}.player-controls #button-list .icon-logo-lozenge.toggle-selected{color:#f00!important}#transport-controls .player-controls #button-list div.icon-player-more,#transport-controls .player-controls #button-list div.icon-player-less{color:#858585}.player-controls .toggle-button span,.player-controls .button span,.player-controls .toggle-button.disabled span,.player-controls .button.disabled span{display:none;margin-top:1em;color:#fff;font-size:.75em;padding:0;position:relative;text-align:center;top:1em;width:100%}.lang-case-sensitive .player-controls .button span:first-letter,.lang-case-sensitive .player-controls .toggle-button span:first-letter{text-transform:uppercase}#transport-controls.focused,.player-controls .toggle-button.focused span,.player-controls div:hover.toggle-button span,.player-controls .button.focused span,.player-controls div:hover.button span{display:block}.player-seekbar{position:relative}.progress-bar{height:4em;left:11%;position:absolute;top:-9em;width:75%;padding:0 1.5%}.progress-bar .progress-bar-playhead,.progress-bar .progress-bar-line{top:2.5em}.progress-bar .progress-bar-line{position:relative;width:100%}.progress-bar .progress-bar-line div{height:2px;position:absolute}.progress-bar .progress-bar-playhead{height:2px;position:relative;width:100%}.progress-bar .progress-bar-line .progress-bar-background{width:100%;background-color:#5b5b5b}.progress-bar .progress-bar-line .progress-bar-played{background-color:#e32c29}.progress-bar .progress-bar-line .progress-bar-loaded{background-color:#999}.ypc-playback .progress-bar-line .progress-bar-played{background-color:#2793e6}.progress-bar .progress-bar-disc{background-color:#ccc;border-radius:50%;height:.6em;margin:-.25em 0 0 -.25em;position:absolute;width:.6em}.progress-bar .cue-range-markers{height:100%;position:absolute;width:100%}.progress-bar-disc{pointer-events:none}.ad-active .progress-bar .cue-range-markers{visibility:hidden}.progress-bar .cue-range-markers .cue-range-marker{background-color:rgba(255,255,255,0);height:2px;margin:0 0 0 -.1em;position:absolute;width:.2em}.progress-bar .cue-range-markers .ad-marker{background-color:#e6bc27}.progress-bar.ad-active .progress-bar-played{background-color:#d6cb23}#player-time-elapsed,.player-time-total,.live-indicator{color:rgba(255,255,255,.75);font-size:1.2em;position:absolute;top:-6em;width:12%}.limited-graphics #player-time-elapsed,.limited-graphics .player-time-total{color:#fff}#player-time-elapsed{left:0;text-align:right}.player-time-total,.live-indicator{right:0;text-align:left}#transport-controls.ad-active #player-time-elapsed,#transport-controls.ad-active .player-time-total{display:none}.live-indicator{display:none;font-size:1.3em;position:absolute;top:-5.6em;width:11.7%}.live-playback .live-indicator{display:block}.live-playback .player-time-total,.live-playback .elapsed-time,.fresh-transport-controls.live-playback .player-time-total,.fresh-transport-controls.live-playback #player-time-elapsed{display:none}.live-playback .progress-bar-disc{background-color:#e62117}#watch .loading-indicator{top:30%}#transport-spacer:hover{background:none}.html5-video-controls{position:absolute;width:100%;height:0;bottom:2em;-moz-transition:all .6s ease;-ms-transition:all .6s ease;-o-transition:all .6s ease;-webkit-transition:all .6s ease}.ytp-player-content{position:absolute;bottom:0;height:0;left:0;right:0}.html5-video-content{position:absolute}.caption-window{position:absolute;pointer-events:none}.standard-caption-window{position:absolute;white-space:normal;width:80%}.caption-window-transform{display:inline-block;line-height:1.32em}.html5-video-player .captions-text{position:relative}.html5-video-player .caption-row{padding-bottom:5px;padding-top:5px}.anchor-point-1{-moz-transform:translate(-50%,0);-ms-transform:translate(-50%,0);-o-transform:translate(-50%,0);-webkit-transform:translate(-50%,0);transform:translate(-50%,0)}.anchor-point-2{-moz-transform:translate(-100%,0);-ms-transform:translate(-100%,0);-o-transform:translate(-100%,0);-webkit-transform:translate(-100%,0);transform:translate(-100%,0)}.anchor-point-3{-moz-transform:translate(0,-50%);-ms-transform:translate(0,-50%);-o-transform:translate(0,-50%);-webkit-transform:translate(0,-50%);transform:translate(0,-50%)}.anchor-point-4{-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.anchor-point-5{-moz-transform:translate(-100%,-50%);-ms-transform:translate(-100%,-50%);-o-transform:translate(-100%,-50%);-webkit-transform:translate(-100%,-50%);transform:translate(-100%,-50%)}.anchor-point-6{-moz-transform:translate(0,-100%);-ms-transform:translate(0,-100%);-o-transform:translate(0,-100%);-webkit-transform:translate(0,-100%);transform:translate(0,-100%)}.anchor-point-7{-moz-transform:translate(-50%,-100%);-ms-transform:translate(-50%,-100%);-o-transform:translate(-50%,-100%);-webkit-transform:translate(-50%,-100%);transform:translate(-50%,-100%)}.anchor-point-8{-moz-transform:translate(-100%,-100%);-ms-transform:translate(-100%,-100%);-o-transform:translate(-100%,-100%);-webkit-transform:translate(-100%,-100%);transform:translate(-100%,-100%)}.anchor-point-0,.anchor-point-1,.anchor-point-2{padding-top:3em}.watch.transport-showing .anchor-point-0,.watch.transport-showing .anchor-point-1,.watch.transport-showing .anchor-point-2{padding-top:9em}.anchor-point-0,.anchor-point-3,.anchor-point-6{padding-left:3em}.anchor-point-2,.anchor-point-5,.anchor-point-8{padding-right:3em}.anchor-point-6,.anchor-point-7,.anchor-point-8,.eureka .watch.transport-showing .anchor-point-6,.eureka .watch.transport-showing .anchor-point-7,.eureka .watch.transport-showing .anchor-point-8{padding-bottom:3em}.watch.transport-showing .anchor-point-6,.watch.transport-showing .anchor-point-7,.watch.transport-showing .anchor-point-8{padding-bottom:15em}.watch.pivot-focused .anchor-point-6{padding-bottom:17.5em}.watch.pivot-focused .anchor-point-7,.watch.pivot-focused .anchor-point-8{padding-bottom:16em}.watch .ytp-fresca-module,.search-focused .watch.message .ytp-fresca-module{display:none}.watch.message .ytp-fresca-module{background-color:rgba(0,0,0,.5);color:#fff;display:block;font-size:2em;padding-left:1.5em;position:absolute;top:30%;width:100%}.watch.message .ytp-fresca-show-countdown{padding-bottom:1.3em}.ytp-fresca-countdown{font-size:1.4em}.pivot-shelf-list{margin-top:12.5em;padding-left:7em;-o-transition:-o-transform .25s,opacity .25s;-webkit-transition:-webkit-transform .25s,opacity .25s;transition:transform .25s,opacity .25s;-webkit-transform:translateZ(0);-o-transform:translateY(10em);-webkit-transform:translateY(10em);transform:translateY(10em)}.pivot-shelf-list.hidden{display:block!important;opacity:0}.limited-animation .pivot-shelf-list.hidden,.forced-limited-animation.pivot-shelf-list.hidden{display:none!important}.pivot-shelf-list.animate-in{-o-transform:translateY(0);-webkit-transform:translateY(0);transform:translateY(0)}.pivot-shelf-list>.carousel{opacity:.5;-o-transition:opacity .25s;-webkit-transition:opacity .25s;transition:opacity .25s}.limited-memory .pivot-shelf-list{opacity:1}.pivot-shelf-list .title-container{color:#fff}.pivot-shelf .tile-title .author,.pivot-shelf .tile-title .view{color:#e1e1e1}.pivot-shelf-list.focused,.post-play .pivot-shelf-list{background:-o-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:-webkit-linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,1));height:17.5em;margin-top:2.5em;padding-top:10em;-o-transform:translateY(-7.5em);-webkit-transform:translateY(-7.5em);transform:translateY(-7.5em)}.post-play .pivot-shelf{opacity:.5}.post-play .pivot-shelf-list.focused .pivot-shelf,.pivot-shelf-list.focused>.carousel{opacity:1}.pivot-shelf-list .focused.list{height:0}.pivot-shelf-list .no-content-message{display:none}.pivot-shelf-list.forced-limited-animation,.limited-animation .pivot-shelf-list,.limited-animation .pivot-shelf-list>.carousel{-o-transition:none;-webkit-transition:none;transition:none}.pivot-shelf-list.forced-limited-animation .placeholder-tile,.limited-animation .pivot-shelf-list .placeholder-tile{height:7.83em;width:14em}#pivot-post-play .pivot-video-tile,#pivot-post-play .placeholder-tile{height:10.625em;width:18.5em}#pivot-post-play .tile-top{height:10.625em}.limited-animation #pivot-post-play .tile-top,#pivot-post-play.forced-limited-animation .tile-top{height:9.825em;width:17.7em}.pivot-video-tile,.pivot-channel-tile{height:7.83em;width:14em}.forced-limited-animation .pivot-video-tile,.forced-limited-animation .pivot-auto-play-tile,.forced-limited-animation .pivot-channel-tile,.pivot-shelf-list.forced-limited-animation .placeholder-tile,#pivot-post-play.forced-limited-animation .placeholder-tile,.limited-animation .pivot-video-tile,.limited-animation .pivot-auto-play-tile,.limited-animation .pivot-channel-tile,.limited-animation #pivot-post-play .placeholder-tile,.limited-animation .pivot-shelf-list .placeholder-tile{background:none;display:inline-block;margin-right:.5em;position:relative;vertical-align:bottom}.forced-limited-animation .pivot-channel-tile,.limited-animation .pivot-channel-tile{border-radius:100%;width:10.625em}.forced-limited-animation .pivot-video-tile.focused,.forced-limited-animation .pivot-auto-play-tile.focused .pivot-video-tile,.limited-animation .pivot-video-tile.focused,.limited-animation .pivot-auto-play-tile.focused .pivot-video-tile{background-color:#fff}.pivot-video-tile .tile-top{height:7.83em}.forced-limited-animation .pivot-video-tile .tile-top,.limited-animation .pivot-video-tile .tile-top{background-color:inherit;height:7.03em;padding:.4em;width:13.2em}.forced-limited-animation .pivot-video-tile.focused .tile-top,.limited-animation .pivot-video-tile.focused .tile-top{background-color:#fff}.pivot-video-tile .tile-overlay{background-color:rgba(0,0,0,.5);color:#fff;display:none;height:100%;margin-top:-7.83em;text-align:center;width:100%}.forced-limited-animation .pivot-video-tile .tile-overlay,.limited-animation .pivot-video-tile .tile-overlay{margin-top:-7.03em}#pivot-post-play .pivot-video-tile .tile-overlay{margin-top:-10.625em}.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay,#pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay{margin-top:-9.875em}.pivot-video-tile.has-overlay .tile-overlay{display:block}#pivot-post-play .pivot-video-tile.has-overlay .tile-overlay{opacity:0}#pivot-post-play.focused .pivot-video-tile.has-overlay .tile-overlay{opacity:1}.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .label{display:none}.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play{font-size:4em}.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play:before{content:"\00e638"}.pivot-video-tile .tile-overlay .icon{font-family:'youtube-icons';font-size:3em;padding-top:.5em}.pivot-video-tile .tile-overlay .label{font-size:1.2em}#pivot-post-play .pivot-video-tile .tile-overlay{color:#e1e1e1}#pivot-post-play .pivot-video-tile .tile-overlay .icon{font-size:4.5em;padding-bottom:.15em;padding-top:.4em}#pivot-post-play .pivot-video-tile .tile-overlay .label,#pivot-post-play .pivot-video-tile .tile-overlay .icon{opacity:0;-o-transition:opacity .25s;-webkit-transition:opacity .25s;transition:opacity .25s}#pivot-post-play.focused .pivot-video-tile .tile-overlay .label,#pivot-post-play.focused .pivot-video-tile .tile-overlay .icon{opacity:1}.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .label,.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .icon,#pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .label,#pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .icon{-o-transition:none;-webkit-transition:none;transition:none}.pivot-video-tile .video-thumb{background-position:center;background-repeat:no-repeat;background-size:100%;height:100%;width:100%}.pivot-video-tile .decoration{margin-top:-2.1em;text-align:right}.pivot-video-tile .duration{background-color:rgba(0,0,0,.7);font-size:1em;font-weight:bold;padding:.5em}.pivot-auto-play-tile{background:none;height:10.625em;overflow:visible;width:18.5em}.forced-limited-animation .pivot-auto-play-tile,.limited-animation .pivot-auto-play-tile{height:10.625em;width:18.5em}.pivot-auto-play-tile .post-play-countdown{display:block;font-size:1.8em;margin-left:10.8em;opacity:0;pointer-events:none;position:absolute;text-align:left;text-shadow:none;top:0;width:17.5em}.pivot-auto-play-tile.countdown-active .post-play-countdown{opacity:1;pointer-events:inherit}.pivot-auto-play-tile .details,.pivot-auto-play-tile .title{color:#fff;opacity:0;pointer-events:none}.pivot-auto-play-tile.focused .details,.pivot-auto-play-tile.focused .title{opacity:1;pointer-events:inherit}.pivot-auto-play-tile .title{font-size:1.4em;margin-left:14em;max-height:2.5em;overflow:hidden;position:absolute;top:2.2em;width:20em}.pivot-auto-play-tile .details{font-size:1.1em;margin-left:17.8em;position:absolute;top:6em;width:37em}.pivot-auto-play-tile .details,.pivot-auto-play-tile .title,.pivot-auto-play-tile .post-play-countdown{-o-transition:opacity .25s;-webkit-transition:opacity .25s;transition:opacity .25s}.limited-animation .pivot-auto-play-tile .details,.limited-animation .pivot-auto-play-tile .title,.limited-animation .pivot-auto-play-tile .post-play-countdown{-o-transition:opacity none;-webkit-transition:none;transition:none}#pivot-post-play .pivot-auto-play-tile .pivot-video-tile{padding-left:0;padding-top:0}#pivot-post-play #post-play-list .no-content-message{display:none}.forced-limited-animation .pivot-horizontal-list,.limited-animation .pivot-horizontal-list{margin-left:-15em}.pivot-horizontal-list.focused .pivot-sliding-highlighter,.post-play #post-play-list.focused .pivot-sliding-highlighter{display:block}.pivot-horizontal-list .pivot-sliding-highlighter,.post-play .pivot-sliding-highlighter{background:transparent;border:.5em #fff solid;box-shadow:.083em .083em .75em .167em #000 inset;height:7.5em;margin-left:-.4em;margin-top:-.4em;pointer-events:none;width:13.8em}.pivot-shelf{position:absolute;width:0}.forced-limited-animation .pivot-shelf,.limited-animation .pivot-shelf{opacity:.5;position:relative}.forced-limited-animation .pivot-shelf.focused,.limited-animation .pivot-shelf.focused{opacity:1}.limited-memory.limited-animation .pivot-shelf{opacity:1}.pivot-shelf .title-container{margin-bottom:1em;visibility:hidden;white-space:nowrap}.pivot-shelf .title-container .icon{font-family:'youtube-icons';vertical-align:middle}.pivot-shelf .tile-title span{display:inline-block;overflow:hidden;text-overflow:ellipsis}.pivot-shelf.focused .title-container{visibility:visible}.pivot-shelf .tile-title,.pivot-shelf .shelf-title{margin-bottom:.3em}.pivot-shelf .tile-title{height:1.7em}.pivot-shelf .tile-title .title{font-size:1.3em;max-width:30em}.pivot-shelf .tile-title .author,.pivot-shelf .tile-title .view{margin-left:.3em;max-width:20em}.pivot-shelf .tile-title .author,.pivot-sliding-highlighter .select{display:none}.pivot-shelf.has-author .tile-title .author{display:inline-block}.forced-limited-animation .pivot-horizontal-list .list,.limited-animation .pivot-horizontal-list .list{width:98em}.forced-limited-animation .postplay-horizontal-list .list,.limited-animation .postplay-horizontal-list .list{margin-left:-13.4em;width:98em}.forced-limited-animation .pivot-channel-tile.focused .tile-top,.limited-animation .pivot-channel-tile.focused .tile-top{background-color:#fff}.forced-limited-animation .pivot-channel-tile .tile-top,.limited-animation .pivot-channel-tile .tile-top{height:6.83em;padding:.4em;width:6.83em}.pivot-channel-tile .tile-top{background:none;border-radius:50%;height:7.83em;margin:0 auto;overflow:hidden;width:7.83em}.pivot-channel-tile .tile-top .video-thumb{background-color:rgba(0,0,0,0)}.pivot-channel-tile .video-thumb{border-radius:50%}.pivot-shelf .pivot-horizontal-list.channel-selected .pivot-sliding-highlighter{border-radius:50%;height:7.5em;margin-left:-.3em;margin-top:-.3em;-moz-transform:translateX(3.2em);-o-transform:translateX(3.2em);-webkit-transform:translateX(3.2em);transform:translateX(3.2em);width:7.5em}.pivot-shelf.channel-selected .shelf-title{visibility:hidden}.pivot-footer{height:9em}.pivot-button-list{padding-top:4em}.pivot-button-list .icon-button{display:inline-block;padding:.5em 1em}.pivot-button-list .icon-button .icon{font-family:'youtube-icons';margin-right:.3em}.pivot-footer.focused .pivot-button-list .icon-button.selected{background-color:#fff}.pivot-button-list .icon-button span{color:#fff;font-size:1.5em}.pivot-footer.focused .pivot-button-list .icon-button.selected span{color:#000}#pivot-post-play{padding-left:6em;padding-top:10em}.limited-animation #pivot-post-play,#pivot-post-play.forced-limited-animation{padding-left:0}#pivot-post-play #post-play-list{font-size:1.1em;margin-left:.1em}.forced-limited-animation .pivot-auto-play-tile,.limited-animation .pivot-auto-play-tile{padding-left:0;vertical-align:bottom}#pivot-post-play.forced-limited-animation .pivot-video-tile,.limited-animation #pivot-post-play .pivot-video-tile{vertical-align:bottom}.forced-limited-animation .pivot-auto-play-tile .pivot-video-tile,.limited-animation .pivot-auto-play-tile .pivot-video-tile{display:block;position:absolute}#pivot-post-play .pivot-sliding-highlighter{border-width:.5em;height:9.9em;margin-top:0;width:18.4em}.limited-animation.sets-ui .exp-densityBrowse .auto-play-tile:not(.focused) .video-tile,.limited-animation .exp-densityBrowse .auto-play-tile.focused .video-tile,.limited-animation .exp-densityBrowse .auto-play-tile{background-color:inherit}.limited-animation .exp-densityBrowse .auto-play-tile.focused .tile-top{background:#fff}.limited-animation .exp-densityBrowse .auto-play-tile .post-play-countdown{top:-2.67em}.loki-video-source{color:#fff;font-size:1.5em;left:5.0em;position:absolute;top:2.6em}.loki-title-card{background:-o-linear-gradient(bottom,rgba(0,0,0,.9) 0%,rgba(0,0,0,.6) 80%,transparent 100%);background:-webkit-linear-gradient(bottom,rgba(0,0,0,.9) 0%,rgba(0,0,0,.6) 80%,transparent 100%);background:linear-gradient(to top,rgba(0,0,0,.9) 0%,rgba(0,0,0,.6) 80%,transparent 100%);bottom:0;display:block;height:25%;position:absolute;width:100%}.loki-title-card .loki-metadata{color:#f1f1f1;height:100%;margin-bottom:2.6em;margin-left:8.0em;overflow:hidden;white-space:nowrap;width:100%}.loki-metadata #loki-progress-bar{display:block;height:2.0em;left:8.0em;padding:0;position:absolute;top:-4.0em;width:80%}#loki-progress-bar .progress-bar-playhead{display:none}.loki-metadata .loki-video-avatar{background-size:contain;display:inline-block;height:8.0em;width:8.0em}.loki-metadata .loki-video-text{display:inline-block;height:100%;margin:0 5.0em 0 3.5em;width:80%}.loki-video-text .loki-video-title{font-size:2.4em;margin-top:-.1em;overflow:hidden;text-overflow:ellipsis;width:80%}.loki-video-text .loki-channel-name{font-size:1.5em;margin-top:.4em;overflow:hidden;text-overflow:ellipsis;width:80%}.loki-video-text .loki-video-description{line-height:1.4em;margin-top:.4em;max-height:4.2em;overflow:hidden;white-space:normal;width:80%}.toaster{color:#aaa;font-size:133%;position:absolute;top:0;width:100%}.toaster .list{margin-top:.8em;position:absolute;width:100%}.toaster .toast{min-height:3.5em;overflow:hidden;position:relative;text-align:center;width:100%;-moz-transition:all .6s ease;-ms-transition:all .6s ease;-o-transition:all .6s ease;-webkit-transition:all .6s ease}.toaster .toast-container{background-color:rgba(27,25,26,0.8);border:1px solid black;display:inline-block;margin:.2em 0 1em;max-width:60%;opacity:1;padding:.5em 1em .6em;-moz-transition:all .3s ease;-ms-transition:all .3s ease;-o-transition:all .3s ease;-webkit-transition:all .3s ease}.toaster .toast.toast-removing .toast-container{opacity:0}.toaster .toast-container>div{display:inline-block;vertical-align:middle}.toaster .toast-icon{background-position:center;background-repeat:no-repeat;background-size:1.1em 1.1em;height:1.2em;width:1.2em}.device-toast .toast-container{padding:0.7em}.toaster .device-toast .toast-msg{background-position:center left;background-repeat:no-repeat;background-size:1.1em 1.1em;padding-left:0.8em}.toaster .avatar{height:2.6em;width:2.6em}.toaster .avatar>div{background-position:center;background-size:cover;height:inherit;width:inherit}.toaster .video-image>div{background-position:center;background-size:cover;height:100%;width:100%}.toast .update-playlist-toast{bottom:0;max-width:14em;padding:0.8em;position:fixed;right:0;text-align:left}.update-playlist-toast .overlay{background:#000;height:55%;margin-left:56%;margin-top:-55%;opacity:.8;width:44%}.update-playlist-toast .video-count{font-size:2.3em;font-weight:normal;line-height:1.2em;padding-top:0.8em;text-align:center}.update-playlist-toast .icon-playlist{font-family:'youtube-icons';font-size:2.2em;height:50%;overflow:hidden;padding:.2em;text-align:center}.update-playlist-toast .avatar{padding:0.3em}.update-playlist-toast .contrast-container{background-color:rgba(0,0,0,0.8);padding:0.4em}.update-playlist-toast .tile-top{height:7.7em;width:14em}.update-playlist-toast .toast-msg{font-size:85%;padding-left:0.6em}.update-playlist-toast .truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:13.2em}.update-playlist-toast .toast-msg.avatar{height:2.1em;width:10em;overflow:hidden}.update-playlist-toast .toast-msg.truncate{white-space:normal}.update-playlist-toast .toast-msg.no-user-avatar{font-size:85%;margin-left:-2.2em}.update-playlist-toast .wrapper>div{display:inline-block;vertical-align:middle}.toaster .toast-icon{background-image:url(img/dial-sprite.png);background-size:100%;max-width:100%}.toast-icon.avatar{background-image:none}.toaster .android-phone-connected{background-position:0 0%}.toaster .android-phone-disconnected{background-position:0 10.14%}.toaster .android-tablet-connected{background-position:0 20.29%}.toaster .android-tablet-disconnected{background-position:0 30.43%}.toaster .ios-phone-connected{background-position:0 40.58%}.toaster .ios-phone-disconnected{background-position:0 50.72%}.toaster .ios-tablet-connected{background-position:0 60.87%}.toaster .ios-tablet-disconnected{background-position:0 71.0%}.toaster .laptop-connected{background-position:0 81.16%}.toaster .laptop-disconnected{background-position:0 91.3%}.toaster .remote-connected{background-position:0 100%;background-size:233.33%}.toaster .remote-disconnected{background-position:0 100%;background-size:233.33%}.toaster .toast-progress{border:1px solid #aaa;width:10em}.toaster .toast-progress .progress{background-color:#666;height:1em}.toaster .volume-muted{background-image:url(img/volume_mute_pressed.png)}.toaster .volume-low{background-image:url(img/volume_0_pressed.png)}.toaster .volume-mid{background-image:url(img/volume_1_pressed.png)}.toaster .volume-high{background-image:url(img/volume_2_pressed.png)}.toaster .volume-toast .toast-msg{text-align:right;width:1.2em}.toaster .volume-toast .toast-container{-moz-transition-delay:.3s;-ms-transition-delay:.3s;-o-transition-delay:.3s;-webkit-transition-delay:.3s}.toaster .volume-toast.toast-removing .toast-container{-moz-transition-delay:0s;-ms-transition-delay:0s;-o-transition-delay:0s;-webkit-transition-delay:0s}.unlimited-welcome-toast .toast-container{box-shadow:0em 0em .6em .02em #000;height:6.5em;margin:0em;padding-right:1em;padding:0;position:fixed;right:0;text-align:left;top:0;width:24.5em;transform:translateX(0);opacity:1;-moz-transition:all .6s ease;-ms-transition:all .6s ease;-o-transition:all .6s ease;-webkit-transition:all .6s ease}.unlimited-welcome-toast.toast-displaying .toast-container{opacity:0;transform:translateX(18em)}.limited-animation .unlimited-welcome-toast .toast-container{opacity:1;-o-transition:none;-webkit-transition:none;transition:none;transform:none}.unlimited-toast-messages{position:absolute;padding-top:2.1em;padding-left:1.3em;width:12em}.unlimited-toast-msg-top{color:#ddd;line-height:1.0em}.unlimited-toast-msg-bottom{padding-top:0.5em;font-size:0.7em}.unlimited-toast-background{background-size:100%;background-position:left;background-repeat:no-repeat;height:100%;width:9em}.unlimited-toast-logo{background-size:100%;background-repeat:no-repeat;height:100%}#dialog{color:#fff;display:none;height:100%;left:0;position:absolute;top:0;width:100%}#error-markup #dialog{display:block}#dialog.focused{display:block}#dialog-wrapper{background-color:#000;height:30em;margin-top:11.1em;padding:1.3em 6em;position:relative}#dialog.browse-sets #dialog-wrapper{background-color:rgba(32,32,32,.5);height:100%;margin-top:0;padding:1.3em 10%}#dialog .dialog-contents{background:no-repeat 90% 30%}#dialog.browse-sets .dialog-contents .icon-simple-dialog{color:#fff}#dialog .dialog-contents .dialog-large-icon{display:none}#dialog.browse-sets .dialog-contents .dialog-large-icon{display:inline-block;font-family:'youtube-icons';font-size:10em;height:2.5em;line-height:2.5em;text-align:center;width:35%}#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .extra-info{color:rgba(255,255,255,.75);display:block;font-family:monospace;font-size:1.5em;line-height:1.4em;padding-top:.8em}#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .label{display:block;font-size:1.8em;line-height:1.1em;padding-top:6.45em}#dialog .dialog-contents .header .title{font-size:2.5em}#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header{border-bottom:1px solid rgba(255,255,255,.2);height:3.4em;margin:0 1.5em}#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header .title{color:rgba(255,255,255,.5);display:block;font-size:1.3em;font-weight:300;height:3em;line-height:3em}#dialog.browse-sets .buttons{font-size:1.8em;margin-right:2%;margin-top:.8em;text-align:right}#dialog.browse-sets .connection-steps{padding:0}#dialog.browse-sets.exit .dialog-contents .header .title{display:block;padding:1em 6.5em 3em 6.5em}#dialog.browse-sets .dialog-contents{background-color:#000;height:80%;margin-top:5%}#dialog.browse-sets.closed-captions .dialog-contents{height:75%}#dialog.browse-sets .dialog-cancel-button{text-align:center}.video-overview .dialog-contents{font-size:2em}#dialog.qr-dialog .dialog-contents{color:#ccc;font-size:1.1em;overflow:hidden;padding-top:4em}#dialog.qr-dialog .dialog-contents .header .title{color:#fff;font-size:2em}#dialog .box{padding-top:1.5em}#dialog.qr-dialog a{color:#fff;display:block;font-size:1.5em}#dialog.qr-dialog .qr{height:7em;margin:.2em 0;width:7em;background-size:100%}#dialog.qr-dialog .dialog-icon{display:block;background-size:12em}#dialog.help .dialog-icon{background-image:url(img/icon-help.png)}#dialog.feedback .dialog-icon{background-image:url(img/icon-feedback.png)}#dialog.system-error .dialog-icon{font-family:'youtube-icons';font-size:10em;margin-right:0;padding-right:.5em;padding-top:.5em;text-align:right;width:2em}#dialog.system-error .dialog-icon:before{content:"\00e656"}#dialog.qr-dialog.browse-sets .dialog-icon{display:none}#dialog .text-dialog{bottom:1.5em;left:0;padding:2em 20em 0 6em;position:absolute;white-space:normal}#dialog.text-dialog .dialog-contents .header .title{font-size:3em;padding-bottom:.5em}.text-dialog #dialog-view{color:#aaa;padding-bottom:1em;width:90%}.text-dialog #dialog-view .dialog-contents{font-size:1.8em}#dialog.browse-sets .icon-dialog-content{display:inline-block;height:25em;vertical-align:top;width:60%}#dialog-view .url{color:#fff;font-size:1.25em;padding-bottom:.8em}#dialog-view .flag-claim .url{padding-bottom:.5em}#dialog-view .reset-help{display:block;width:25em}#dialog.browse-sets .tos-dialog .icon-dialog-content{padding-top:9em}#dialog.browse-sets .tos-dialog .icon-dialog-content .subtitle{color:#aaa}#dialog.browse-sets .tos-dialog .icon-dialog-content .url{font-size:2em}#dialog.browse-sets.qr-dialog .dialog-contents{padding-top:0}#dialog.browse-sets.qr-dialog .icon-dialog-content .link{margin-top:5em;padding-top:0}#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper{margin-top:2em}#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper .qr{border:.2em rgba(255,255,255,.1) solid;padding:.5em}#dialog .signed-out-dialog{font-size:1.8em}.connection-error,.connection-steps{display:inline-block;font-weight:300;padding:0 1em 1em 2em;white-space:normal}.connection-error{vertical-align:top}.connection-error div{margin-bottom:1em}#dialog .login-dialog .activation-code{font-size:1.3em;letter-spacing:.1em;line-height:1.3em}#dialog .sets-login-dialog .body-text{display:inline-block;height:25em;vertical-align:top;width:50%}#dialog .sets-login-dialog .body-text .connection-instructions{font-size:1.9em;margin-top:3.5em}#dialog .sets-login-dialog .standard-message,#dialog .sets-login-dialog .like-dislike-message,#dialog .sets-login-dialog .subscribe-message,#dialog .sets-login-dialog .upload-message,#dialog .sets-login-dialog .player-message{display:none}#dialog.standard-login .sets-login-dialog .standard-message,#dialog.like-dislike-login .sets-login-dialog .like-dislike-message,#dialog.subscribe-login .sets-login-dialog .subscribe-message,#dialog.upload-login .sets-login-dialog .upload-message,#dialog.player-login .sets-login-dialog .player-message{display:block}#dialog .pairing .qr-code-wrapper{display:inline-block;vertical-align:top}#dialog .manual-connect-content .connection-steps{padding:0}#dialog .manual-connect-content .connection-steps .label{color:#aaa;font-size:.7em;margin-top:1em}#dialog .manual-connect-content .connection-steps .step1,#dialog .manual-connect-content .connection-steps .step2{margin-top:.7em}#dialog .manual-connect-content .connection-steps .pair-url,#dialog .manual-connect-content .connection-steps .pair-code{margin-left:.3em}#dialog.browse-sets .manual-connect-content .connection-steps .label{font-size:1.3em}#dialog.browse-sets .manual-connect-content .connection-steps .step1,#dialog.browse-sets .manual-connect-content .connection-steps .step2{display:inline-block;font-size:1.3em}#dialog.browse-sets .manual-connect-content .connection-steps .pair-url,#dialog.browse-sets .manual-connect-content .connection-steps .pair-code{display:inline-block;font-size:1.3em;margin-left:.3em}#dialog.browse-sets .pairing .connection-instructions{font-size:1em;padding-top:10em}#dialog .manual-connect .dial-upsell-content{display:none}#dialog .dial-upsell .manual-connect-content .connection-steps .no-dial-connect-step1,#dialog .manual-connect .manual-connect-content .connection-steps .with-dial-connect-step1{display:none}#dialog .manual-connect .manual-connect-content .connection-steps{font-size:1.5em}#dialog .manual-connect .manual-connect-content .connection-steps .label{display:none}#dialog.browse-sets .dial-upsell .dial-upsell-content{font-size:1.8em;white-space:normal;width:80%}#dialog.browse-sets .dial-upsell .dial-upsell-content .cast-icon{height:1.3em;margin:0;width:1.5em}#dialog.browse-sets .dial-upsell .manual-connect-content{color:#aaa;font-size:1.4em;line-height:1em}#dialog.browse-sets .remote-reset-dialog .connected-list .connected-header{color:#fff;font-size:1.5em;margin-top:6em}#dialog.browse-sets .remote-reset-dialog .connected-list .devices{display:inline-block;font-size:1em}#dialog.browse-sets .remote-reset-dialog .connected-list .devices>div{display:inline-block;font-size:1em;padding-left:0;padding-right:1.5em;width:10em}#dialog.browse-sets .remote-reset-dialog .reset-help{font-size:1.5em;margin-top:1em}#dialog .logout-authenticated-info{padding:2.5em 0}#dialog .login-user-icon{background-size:cover;display:inline-block;height:4em;margin:2em 2em 0 0;width:4em}#dialog.browse-sets .login-user-icon{margin:0 15%;border-radius:20em}#dialog .login-user-info{display:inline-block;margin-left:1.7em;margin-top:-.8em;font-size:2em;font-weight:300;width:82%}#dialog .login-user-info h3{font-size:2.2em;font-weight:normal;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#dialog.browse-sets .logout-authenticated-info{padding:0}#dialog.browse-sets .login-user-info{height:13em;margin:0;width:100%}#dialog.browse-sets .login-user-info .display-name,#dialog.browse-sets .login-user-info .platform-container{display:none}#dialog.browse-sets .login-user-info .signed-in-message{display:inline-block;width:50%}#dialog.browse-sets .login-user-info .signed-in-label strong{color:#fff;display:block;font-size:2.5em;overflow:hidden;text-overflow:ellipsis}#dialog.browse-sets .login-user-info .signed-in-label{color:#aaa;font-size:.5em;margin-top:10em}#dialog.browse-sets .login-user-info .sign-out-label{margin-top:1em}#dialog .spinner{height:10em;width:10em}#dialog .spinner .loading-indicator{background-size:contain;height:100%;width:100%}#dialog .buttons{font-size:3em;font-weight:300;padding-top:.3em}#dialog .buttons>div{background-color:#333;color:#000;cursor:pointer;display:inline-block;min-width:2.4em;padding:0 .3em;text-align:center}#dialog.browse-sets .buttons .button{background-color:#000;color:rgba(255,255,255,.5);min-width:3em;padding:.2em .8em}#dialog.browse-sets .buttons .focused,#dialog.browse-sets .buttons .button.focused:hover{background-color:#f1f1f1;color:#666}#dialog .buttons .button:hover,#dialog.browse-sets .buttons .button:hover{background-color:#666}#dialog .buttons div{margin-left:.5em}#dialog .buttons .focused,#dialog .buttons .focused:hover{background-color:#f1f1f1;color:#666}#dialog .ps4-logout-dialog .logout-prompt{font-size:1.7em}#dialog .logout-prompt{margin-top:6em}.scrolling-text{font-size:1.3em;height:15em;margin-right:1.1em;margin-top:1em;overflow:hidden}.scrolling-text h4{margin:0;padding:0}.scrolling-text>div{overflow:hidden;padding-bottom:1em}.flag-list-container{margin-top:.5em}.flag-list .button{color:#868686;cursor:pointer;display:inline-block;font-size:1.8em;padding:.4em;vertical-align:top}.flag-list .button{width:12em}.flag-list .button:hover{background-color:#444}.flag-list .button.focused,.flag-list .button.focused:hover{background-color:#fff;color:#676767}#flag-widget{font-weight:300}.flag-video{color:#676767;font-size:1.8em;font-weight:300;padding-top:1em;width:47%}.flag-video .url{color:#fff;display:block;font-size:1.6em;padding-top:.5em}.flag-example{background:url(img/flag.png) no-repeat 0 0;background-size:contain;display:inline-block;height:57%;position:absolute;right:18%;top:9%;width:23%}.flag-claim .metadata{display:block;font-size:1em;font-weight:500;padding-top:.2em;white-space:normal}.flag-claim .url{color:#868686;display:block;font-weight:300}.flag-claim{color:#676767;font-size:1.6em;font-weight:300;margin:1em 0 0 2em;white-space:nowrap}.flag-claim .copyright-infringment{display:inline-block;white-space:normal;width:50%}.flag-claim .privacy-invasion{display:inline-block;margin-left:4%;vertical-align:top;white-space:normal;width:40%}.flag-claim .email{color:#868686}.flag-claim .subtitle{font-size:1.2em;font-weight:500}.player-error-dialog.player-error{color:#aaa;font-size:1.8em;padding:1em 0 8em 0em}#dialog .scrollbar{height:70%;margin-top:5em;right:5em}#dialog .scrollbar .handle{height:5em}.paid-channel-info{font-size:1.4em;padding-top:1em}.paid-channel-info .channel-url{font-weight:bold}.status-dialog #dialog-wrapper{background-color:rgba(0,0,0,.5)}.status-dialog .icon{background:url(img/pairing-promo-combo.png) center center no-repeat;background-size:contain;display:inline-block;height:11em;vertical-align:middle;width:25%}.status-dialog .info{display:inline-block;padding-left:.5em;vertical-align:middle;width:70%}.status-dialog .message{color:#ccc;font-size:2em}.status-dialog #dialog-view{padding-top:7em}.dialog-focused #legend{bottom:12%;display:block}#legend.legend-for-dialog-closed-captions{bottom:6%}#dialog.confirm-cookies .dialog-contents .header .title{font-size:3em}#dialog.confirm-cookies #dialog-view{color:#aaa;font-size:1.8em;height:8em;padding-top:.9em}.single-pane-selector{padding-bottom:1em;padding-top:1em;white-space:nowrap}.single-pane-selector .list{display:inline-block;margin-right:.5em;padding-left:.5em;padding-right:.5em;vertical-align:top;width:94%}.single-pane-selector .button .label{width:90%}.single-pane-selector .check-button.previously-selected .icon-check{display:inline-block}.split-pane-selector{border-bottom:.1em solid rgba(255,255,255,.2);padding-bottom:1em;padding-top:1em;white-space:nowrap}.check-button .icon-check{display:none;font-family:youtube-icons}.single-pane-selector .labeled-value,.split-pane-selector .labeled-value{color:#868686;font-size:1.4em;height:2.8em;line-height:1.5em;overflow:hidden;padding:0 1em;white-space:normal}.single-pane-selector .labeled-value .value,.split-pane-selector .labeled-value .value{color:#666;display:block;font-size:.7em;line-height:1.4em}.single-pane-selector .button,.split-pane-selector .button{color:#868686;cursor:pointer;font-size:1.4em;height:2.8em;line-height:2.8em;overflow:hidden;padding:0 .4em;white-space:normal}.single-pane-selector .button .label,.split-pane-selector .button .label{display:inline-block;line-height:1.3em;vertical-align:middle}.single-pane-selector .subtitled-button,.split-pane-selector .subtitled-button{line-height:1.5em}.single-pane-selector .button.no-model,.split-pane-selector .button.no-model{visibility:hidden}.split-pane-selector .list{display:inline-block;vertical-align:top;width:47%}.split-pane-selector .list:first-child{border-right:.1em solid rgba(255,255,255,.2);margin-right:.5em;padding-right:.5em}.single-pane-selector .button:hover,.single-pane-selector .list:not(.focused) .button.selected,.split-pane-selector .button:hover,.split-pane-selector .list:not(.focused) .button.selected{background-color:#444;color:#fff}.single-pane-selector .button.focused,.single-pane-selector .button.focused:hover,.split-pane-selector .button.focused,.split-pane-selector .button.focused:hover{background-color:#fff;color:black}.single-pane-selector .subtitled-button span.subtitle,.split-pane-selector .subtitled-button span.subtitle{color:#666;display:block;font-size:.7em;line-height:1.4em}.color-button .preview{border-width:2px;border-color:#000;border-style:solid;color:#868686;display:inline-block;height:1em;margin:0 .2em .2em .2em;vertical-align:middle;width:1em}.color-button .preview.rounded{border-radius:50%}.preview.black{background-color:#000;border-width:1px;border-color:#fff;border-style:solid}.preview.red{background-color:#f00}.preview.magenta{background-color:#f0f}.preview.blue{background-color:#00f}.preview.cyan{background-color:#0ff}.preview.green{background-color:#0f0}.preview.yellow{background-color:#ff0}.preview.white{background-color:#fff}.debug-dialog{font-size:.9em}.debug-dialog span.label{font-weight:bold}#dialog.browse-sets .video-upload-dialog-contents{display:inline-block;font-size:1.6em;margin:1em 3% 0 3%;text-align:left;vertical-align:top;width:55%}#dialog.browse-sets .modify-video .video-upload-dialog-contents{margin-top:2em;text-align:center}.video-upload-status .video-url{color:#2793e6}.delete-video{padding-bottom:6em}.modify-video .list .button{background-position:50% 20%;background-repeat:no-repeat;background-size:60% 60%;color:#848484;display:inline-block;height:8em;margin-right:1em;text-align:center;width:8em}.modify-video .list .button.focused{background-color:#fff;color:#282828}.modify-video .list .button span{display:block;font-size:1.2em;margin:4.6em .5em .5em .5em;overflow:hidden;white-space:nowrap}.modify-video .modify-edit-button{background-image:url('img/edit_tile_light.png')}.modify-video .modify-edit-button.focused{background-image:url('img/edit_tile_dark.png')}.modify-video .modify-delete-button{background-image:url('img/trash_tile_light.png')}.modify-video .modify-delete-button.focused{background-image:url('img/trash_tile_dark.png')}.delete-video-dialog .video-tile .details,.modify-video .video-tile .details{margin-top:-.1em}.browse-sets #modify-list .button{height:7.5em;margin-right:.9em;width:7.5em}.browse-sets #modify-list .button span{font-size:1.1em;margin-top:5.2em}.delete-video-dialog{margin-bottom:14em}.browse-sets .delete-video-dialog{margin-bottom:1em}.video-processing,.video-upload-error{font-size:1.5em}.video-upload-error .error-container{color:#aaa;margin-top:1em}#dialog .buttons .upload-terms,#dialog .buttons .upload-terms:hover{background-color:#000;color:#555;display:block;font-size:.6em;margin-left:1.5em;text-align:left}.upload-progress{margin-bottom:1em;width:100%}.upload-progress-value{text-align:left;width:100%}.upload-progress span{margin-left:-1em;position:relative;width:4em}.upload-progress .upload-progress-bar{background-color:#aaa;width:100%}.upload-progress .upload-progress-bar .completed{background-color:#2793e6;height:1em}.privacy-button{background:.4em 50% no-repeat;background-size:1.5em;cursor:pointer;position:relative}.privacy-button .checkbox{background-position:100%;background-size:2em;height:2em;left:85%;position:absolute;top:0;width:2em}.privacy-button.checked .checkbox{background-image:url(img/icon-privacy-check-light.png)}.privacy-button.focused.checked .checkbox{background-image:url(img/icon-privacy-check-dark.png)}.privacy-button .label .name{background-position:0 .5em;background-size:2em;line-height:1.5em;text-indent:1.8em}.privacy-button .description{font-size:.6em;line-height:.8em;padding-left:2.9em}.privacy-button .name{font-size:1em;line-height:1.2em;padding-left:1.7em}.private-state,.video-tile .private{background-image:url(img/icon-privacy-private-light.png)}.private-state.focused{background-image:url(img/icon-privacy-private-dark.png)}.public-state,.video-tile .public{background-image:url(img/icon-privacy-public-light.png)}.public-state.focused{background-image:url(img/icon-privacy-public-dark.png)}.unlisted-state,.video-tile .unlisted{background-image:url(img/icon-privacy-unlisted-light.png)}.unlisted-state.focused{background-image:url(img/icon-privacy-unlisted-dark.png)}.video-tile .private,.video-tile .public,.video-tile .unlisted{background-position:left;background-repeat:no-repeat;background-size:1.5em;min-height:1.5em;min-width:1.5em;padding-left:1.5em}.video-privacy .button,.video-overview .button{display:inline-block;height:2em;line-height:2em;margin:.1em 0;overflow:hidden;padding:.1em .5em;vertical-align:top;white-space:nowrap;width:65%}.video-privacy .button{width:85%}.video-overview .button:first-child{width:20%}.video-privacy .button.focused,.video-privacy .button:not(.disabled):hover,.video-overview .button.focused,.video-overview .button:not(.disabled):hover{background-color:#fff;color:#676767}#dialog.browse-sets .video-privacy .button:nth-child(2){width:11em}#dialog.browse-sets .video-uploads{margin:3em 1em 2em}#dialog.browse-sets .video-uploads .carousel{overflow:hidden}#dialog.browse-sets .video-uploads .carousel .video-tile .details{text-align:left}.video-overview .title-button{line-height:1em;white-space:normal}#dialog.browse-sets .video-overview .title-button .label{display:inline-block;line-height:2em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:95%}.video-overview .channel-button{background-position:.35em 50%;background-repeat:no-repeat;background-size:1.5em;line-height:2em;overflow:hidden;text-indent:1.8em;text-overflow:ellipsis}.video-uploads .carousel{height:20em;position:relative;white-space:nowrap}.video-tile-container{display:inline-block;margin-top:1.7em;text-align:right;width:35%}.video-tile-container .video-tile{border:.1em rgba(255,255,255,.2) solid;display:inline-block;height:22em;position:static;text-align:left;width:20em}.video-tile-container .video-tile .tile-top{height:51%}.video-tile-container .video-tile .tile-bottom .details{height:inherit}.video-uploads .carousel .video-tile{height:20em;width:18em}.video-uploads .video-tile .decoration{top:7em}.video-tile-container .video-tile .tile-bottom,.video-uploads .video-tile .tile-bottom{width:initial}.dialog.closed-captions #dialog-wrapper{margin-top:5em}#dialog.closed-captions-language-only #dialog-wrapper{padding:1.6em 26%}#dialog.closed-captions-language-only #options-list{display:none}#legend.legend-for-dialog-closedCaptionsDialog{bottom:24%}#dialog.closed-captions-language-only~#legend{right:29%}.simple-dialog{margin:3em;font-size:1.6em}.lang-ja_JP .connection-instructions .step1,.lang-ja_JP .connection-instructions .step2,.lang-ko_KR .connection-instructions .step1,.lang-ko_KR .connection-instructions .step2,.lang-zh_CN .connection-instructions .step1,.lang-zh_CN .connection-instructions .step2,.lang-zh_HK .connection-instructions .step1,.lang-zh_HK .connection-instructions .step2,.lang-zh_TW .connection-instructions .step1,.lang-zh_TW .connection-instructions .step2{font-size:.8em}.lang-de_DE .action-tile .content .title,.lang-el_GR .action-tile .content .title,.lang-es_ES .action-tile .content .title,.lang-es_MX .action-tile .content .title,.lang-fr_FR .action-tile .content .title,.lang-fr_CA .action-tile .content .title,.lang-ko_KR .action-tile .content .title,.lang-nl_NL .action-tile .content .title,.lang-pl_PL .action-tile .content .title,.lang-pt_BR .action-tile .content .title,.lang-pt_PT .action-tile .content .title,.lang-ru_RU .action-tile .content .title,.lang-uk_UA .action-tile .content .title{font-size:2em}.lang-it_IT .action-tile .content .title{font-size:1.8em}.lang-es_ES .action-tile .improve-yt-tile .title,.lang-fr_CA .action-tile .history-tile .title,.lang-fr_FR .action-tile .history-tile .title,.lang-de_DE .action-tile .terms-tile .title,.lang-fr_CA .action-tile .terms-tile .title,.lang-fr_FR .action-tile .terms-tile .title{font-size:1.7em}.lang-es_ES .action-tile .videoinfo-tile .title,.lang-es_MX .action-tile .videoinfo-tile .title,.lang-fr_CA .action-tile .videoinfo-tile .title,.lang-fr_FR .action-tile .videoinfo-tile .title,.lang-pt_BR .action-tile .videoinfo-tile .title{font-size:1.5em;white-space:normal}.lang-de_DE .action-tile .videoinfo-tile .title{font-size:1.45em;padding-left:.5em;padding-right:.5em;white-space:normal}.lang-es_ES .action-tile .videoinfo-tile .label,.lang-es_MX .action-tile .videoinfo-tile .label,.lang-fr_CA .action-tile .videoinfo-tile .label,.lang-fr_FR .action-tile .videoinfo-tile .label,.lang-pt_BR .action-tile .videoinfo-tile .label{padding-top:.6em}.lang-de_DE .action-tile .videoinfo-tile .label{font-size:1.6em;padding-top:.7em}.lang-ja_JP .action-tile .terms-tile .title{font-size:2em}.lang-ja_JP #transliteration .list{font-size:1.2em}.lang-ja_JP #keyboard-grid{font-size:1.5em}.lang-ja_JP #keyboard-spacebar{margin-left:5.5em}.lang-zh_CN #search .horizontal-list,.lang-zh_HK #search .horizontal-list,.lang-zh_TW #search .horizontal-list,.lang-ja_JP #search .horizontal-list{-o-transform:translateY(9.5em);-webkit-transform:translateY(9.5em);transform:translateY(9.5em)}.lang-ko_KR #search .horizontal-list{-o-transform:translateY(10.5em);-webkit-transform:translateY(10.5em);transform:translateY(10.5em)}.lang-ko_KR #search-keyboard{font-size:1.82em}.lang-ko_KR #letter-suggest .button{width:1em}.lang-ko_KR #keyboard-grid,.lang-ru_RU #keyboard-grid,.lang-uk_UA #keyboard-grid{margin-top:0.3em}.lang-ko_KR #keyboard-grid.lang-ko .numbers-toggle-tile.button,.lang-ru_RU #keyboard-grid.lang-ru .numbers-toggle-tile.button,.lang-uk_UA #keyboard-grid.lang-ua .numbers-toggle-tile.button{font-size:0.75em}.lang-ko_KR #keyboard-grid .button,.lang-ru_RU #keyboard-grid .button,.lang-uk_UA #keyboard-grid .button{height:1.2em;line-height:1.1em;margin-top:0.6em}.lang-ko_KR #letter-suggest .button,.lang-ru_RU #letter-suggest .button,.lang-uk_UA #letter-suggest .button{height:1.2em;line-height:1.1em;width:1.2em}.lang-ko_KR .search-state #spinner,.lang-ru_RU .search-state #spinner,.lang-uk_UA .search-state #spinner,.lang-ja_JP .search-state #spinner{top:25em}.lang-ko_KR .search-state .application-message,.lang-ru_RU .search-state .application-message,.lang-uk_UA .search-state .application-message,.lang-ja_JP .search-state .application-message{top:55%}.lang-ru_RU #keyboard-grid.lang-ru .button,.lang-uk_UA #keyboard-grid.lang-ua .button,.lang-ko_KR #keyboard-grid,.lang-ko_KR #letter-suggest,.lang-ko_KR #keyboard-spacebar{font-size:1em}.lang-ru_RU #keyboard-spacebar,.lang-uk_UA #keyboard-spacebar{margin-left:4.2em}.lang-de_DE .countdown-ad-callout .time-left-label,.lang-de_DE .countdown-ad-callout .skip-time-label{font-size:1.1em}.lang-cs_CZ .action-tile .description,.lang-de_DE .action-tile .description,.lang-hi_IN .action-tile .description,.lang-pl_PL .action-tile .description,.lang-pt_BR .action-tile .description,.lang-pt_PT .action-tile .description,.lang-ru_RU .action-tile .description,.lang-uk_UA .action-tile .description{font-size:1.3em}.lang-de_DE .guide-button.footer .guide-button-title{width:27.81em}.lang-de_DE .guide-user-name{width:13.5em}.lang-nl_NL .guide-button.disabled .guide-button-title,.lang-de_DE .guide-button.disabled .guide-button-title,.lang-fr_FR .guide-button.disabled .guide-button-title,.lang-pt_PT .guide-button.disabled .guide-button-title{width:13em}.lang-tr_TR #search #keyboard-grid .button.clear-query-tile,.lang-tr_TR .action-tile .title,.lang-tr_TR .guide-button-icon,.lang-tr_TR #keyboard-grid .button,.lang-tr_TR .tile-top .badge,.lang-tr_TR .tile-top .duration,.lang-tr_TR .title-card .badges span .lang-tr_TR.lang-case-sensitive .player-controls .button span:first-letter,.lang-tr_TR.lang-case-sensitive .player-controls .toggle-button span:first-letter,.lang-tr_TR.lang-case-sensitive .snap-controls .speakable span:first-letter,.lang-tr_TR.lang-case-sensitive .voice-command:first-letter{text-transform:none}.voice-command{display:none}.lang-case-sensitive .voice-command:first-letter{text-transform:uppercase}.engaged .voice-command{background-color:rgba(22,22,22,.7);color:#5dc21e;display:block;font-size:1em}.engaged .horizontal-list .carousel .voice-command{display:none}.engaged .horizontal-list.focused .carousel .voice-command{display:block}.engaged .pivot-video-tile .voice-command,.engaged .pivot-channel-tile .voice-command{display:none}.engaged .pivot-video-tile.speakable .voice-command,.engaged .pivot-channel-tile.speakable .voice-command{display:block}.engaged .video-tile .voice-command,.engaged .pivot-video-tile .voice-command,.engaged .pivot-channel-tile .voice-command,.engaged .playlist-tile .voice-command,.engaged .channel-tile .voice-command{bottom:50%;font-size:1.5em;margin-top:-2.17em;padding:.5em .9em;opacity:0.999}.engaged .video-tile.disabled .voice-command,.engaged .pivot-video-tile.disabled .voice-command,.engaged .pivot-channel-tile.disabled .voice-command{display:none}.engagement-indicator{bottom:0.8em;display:none;font-size:1.5em;left:1.8em;position:absolute;width:16em}.engaged .engagement-indicator{background-color:transparent;color:#5dc21e;display:block}.engagement-indicator .icon{background:no-repeat center;display:inline-block;height:2em;vertical-align:middle;width:2em}.engagement-indicator .stop-listening{padding:.5em}.engagement-indicator .stop-listening .icon{background-image:url('img/icon-xboxone-engaged.png')}.engagement-indicator .text{text-align:center}.engagement-indicator .title{display:inline-block;font-size:0.9em}.browse-sets-state.engaged .engagement-indicator,.browse-state.engaged .engagement-indicator,.post-play-state.engaged .engagement-indicator,.post-play-state.engaged .engagement-indicator,.settings-state.engaged .engagement-indicator,.search-state.engaged .engagement-indicator{display:block}.watch-state.engaged .engagement-indicator{display:block;height:3em;left:0;margin-left:auto;margin-right:auto;right:0;text-align:center;top:20%}.watch-focused .engagement-indicator .stop-listening{background-color:rgba(22,22,22,.7)}.sliding-highlighter .select,.engaged .legend-item,.engaged #dialog .speakable.button,.engaged .context-menu .speakable.button,.engaged .speakable.action-tile .title,.engaged .modify-video .speakable,.engaged .modify-video .speakable.focused{color:#5dc21e}.voice-footer{background-color:rgba(22,22,22,.7);bottom:0;color:#5dc21e;font-size:1.5em;height:3em;padding:1em 0 0.6em 0;position:absolute;text-align:center;width:100%}.voice-footer .list{font-size:0.65em;margin:auto;margin-top:-1.3em;padding-top:1em;width:29em}.voice-footer .component{display:inline-block;padding-right:1em}.engaged .voice-footer{color:#5dc21e}.engaged .voice-footer li{display:inline;padding:0 2%}.engaged .player-controls .button span,.engaged .player-controls .toggle-button span{color:#5dc21e;display:block}.engaged .player-controls .button.disabled span,.engaged .player-controls .toggle-button.disabled span{display:none}.engaged #transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip .label,.engaged .skip-ad-button.canskip .label{color:#5dc21e}.engaged .player-controls-widget{margin-top:7.4em}.engaged .player-controls .voice-command.transport{top:1em}.legend{bottom:5.5%;color:#f1f1f1;position:absolute;right:5.5%;text-shadow:2px 2px 4px #000;display:none;background:-webkit-radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0));background:-o-radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0));background:-moz-radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0));background:radial-gradient(ellipse closest-side,rgba(0,0,0,0.2) 25%,rgba(0,0,0,0.1) 60%,rgba(0,0,0,0))}.limited-memory .legend{background:none}.legend-item{cursor:pointer;display:none;margin:0 0 0 .5em}.legend-item span{vertical-align:middle}.legend-item .icon{background-size:100%;display:block;height:2.5em;margin:auto;max-width:100%;text-align:center;width:2.5em}.legend-item.more>.icon.icon-player-more{background-size:0}.legend-item.more>.icon:before{font-family:'youtube-icons';color:#fff;font-size:1.9em;margin:auto;position:relative;top:.2em}.legend-item .title{display:block;font-size:1.1em;margin-top:0;text-align:center;text-transform:none}#legend.back .back,#legend.close-guide .close-guide,#legend.delete .delete,#legend.exit .exit,#legend.guide .guide,#legend.search .search,#legend.space .space,#legend.home .home,#legend.modify .modify,#legend.more .more,.reversed-keys #legend.back .reversed-back{display:inline-block}.reversed-keys #legend.back .back{display:none}.desktop .legend,.game-console .legend,.tv .legend{display:inline-block}.wiiu .legend{font-size:1.2em}.desktop .legend-item .icon{background-image:url(img/legend-sprite-desktop.png)}.game-console.sony .legend-item .icon{background-image:url(img/legend-sprite-ps3.png)}.roku #legend .legend-item .icon{background-image:url(img/legend-sprite-roku.png)}.skip-ad-callout .icon,.tv .legend-item .icon{background-image:url(img/legend-sprite-tv.png)}.wiiu .legend-item .icon{background-image:url(img/legend-sprite-wiiu.png)}.wiiu #user-info-background{-webkit-transform:translateZ(0)}.wiiu #search .horizontal-list{top:30%;-webkit-transform:none;transform:none}.wiiu .search-state #spinner{top:20em}.xboxone .legend-item .icon{background-image:url(img/legend-sprite-xboxone.png)}.xbox360 .legend-item .icon{background-image:url(img/legend-sprite-xbox360.png)}.desktop .legend-item.back .icon,.desktop .legend-item.exit .icon{background-position:0 47.4%;background-size:240%}.desktop .legend-item.search .icon{background-position:0 100%;background-size:240%}.desktop .legend-item.close-guide .icon,.desktop .legend-item.guide .icon,.desktop .legend-item.home .icon,.desktop .legend-item.space .icon{background-position:0 73.7%;background-size:240%}.desktop .skip-ad-callout .icon{background-position:31% 67.5%;background-size:520%;width:6.6em}.game-console.sony .legend-item .icon,.tv .legend-item .icon,.wiiu .legend-item .icon{background-repeat:no-repeat;height:1.5em;position:relative;bottom:.5em;width:1.5em}.game-console.sony .legend-item.more>.icon:before,.tv .legend-item.more>.icon:before,.wiiu .legend-item.more>.icon:before{top:initial}.game-console.microsoft .legend-item{margin-left:1.4em}.game-console.microsoft .legend-item.back .icon,.game-console.microsoft .legend-item.exit .icon,.game-console.microsoft .legend-item.reversed-back .icon{background-position:0 27.5%}.game-console.microsoft .legend-item.search .icon,.game-console.microsoft .legend-item.space .icon{background-position:0 82%}.game-console.microsoft .legend-item.close-guide .icon,.game-console.microsoft .legend-item.delete .icon,.game-console.microsoft .legend-item.guide .icon,.game-console.microsoft .legend-item.home .icon,.game-console.microsoft .legend-item.modify .icon{background-position:0 54.9%}.roku #legend .legend-item.back .icon,.roku #legend .legend-item.exit .icon{background-position:0 105%}.game-console.sony .legend-item.back .icon,.game-console.sony .legend-item.exit .icon{background-position:0 0%}.game-console.sony .legend-item.reversed-back .icon{background-position:0 100%}.game-console.sony .legend-item.search .icon,.game-console.sony .legend-item.space .icon{background-position:0 87.5%}.game-console.sony .legend-item.close-guide .icon,.game-console.sony .legend-item.delete .icon,.game-console.sony .legend-item.guide .icon,.game-console.sony .legend-item.home .icon{background-position:0 75%}.game-console.sony #dialog .logout-authenticated-info,.game-console.microsoft #dialog .logout-authenticated-info{padding-top:0}.game-console.sony .action-tile .platform-container,.game-console.microsoft .action-tile .platform-container{margin:1em;text-align:center}.game-console.sony .login-user-info .platform-user-name,.game-console.sony .platform-user-name,.game-console.microsoft .login-user-info .platform-user-name,.game-console.microsoft .platform-user-name{vertical-align:middle}.game-console.sony .login-user-info .platform-user-icon,.game-console.sony .platform-user-icon,.game-console.microsoft .platform-user-icon,.game-console.microsoft .login-user-info .platform-user-icon{background-size:cover;display:inline-block;height:3em;vertical-align:middle;width:3em}.game-console.sony #dialog .login-user-info .platform-container>div,.game-console.microsoft #dialog .login-user-info .platform-container>div{font-size:1em}.wiiu .advertisement-callout,.wiiu .advertisement-info,.wiiu #leanback-player-container,.wiiu .skip-ad-button,.wiiu .title-card,.wiiu #watch,.wiiu .toaster{-h5vcc-target-screen:screen-all}.wiiu .pivot-shelf-list{opacity:1}.wiiu .legend-item.back .icon,.wiiu .legend-item.exit .icon{background-position:0 33.3%}.wiiu .legend-item.search .icon{background-position:0 100%}.wiiu .legend-item.close-guide .icon,.wiiu .legend-item.delete .icon,.wiiu .legend-item.guide .icon,.wiiu .legend-item.home .icon{background-position:0 66.7%}.wiiu .qr-code-wrapper{display:none}.wiiu #search .search-pairing{display:none}.wiiu #search-suggestions{font-size:1.6em;height:1.6em}.wiiu .search-state .application-message{top:35%}.tv .legend-item.guide .icon,.tv .legend-item.close-guide .icon,.tv .skip-ad-callout .icon{background-position:0 100%}.lg .legend-item.back,.lg .legend-item.exit{cursor:pointer}.tv .legend-item.back .icon,.tv .legend-item.exit .icon{background-position:0% 0%}.lg .legend-item.back .icon,.lg .legend-item.exit .icon{opacity:0.8}.lg .legend-item.back:hover .icon,.lg .legend-item.exit:hover .icon{opacity:1}body.samsung{background-color:transparent!important}body.lg{background-color:transparent!important;background-image:url(tv:)!important}body.limited-memory{background-color:#111}.limited-memory .bg,.eureka .bg{background-image:none;background-color:#2e2e2e}.limited-animation .loading-indicator,.opera .loading-indicator,.lg .loading-indicator{display:none}.limited-animation .fallback-loading-indicator,.opera .fallback-loading-indicator,.lg .fallback-loading-indicator{display:block}.limited-animation .video-tile .video-thumb{opacity:1}.limited-memory .video-tile .video-thumb{background-size:cover}.limited-memory .video-tile .video-thumb.preloaded{background-size:auto}.roku.limited-memory .video-tile .video-thumb{background-size:100%;opacity:1}.limited-animation.playlist-tile .count-overlay{background-color:#000}.search .placeholder-tile,.settings .placeholder-tile,.limited-animation .browse-content .list .placeholder-tile{height:24em;width:20.75em}.guide .placeholder-tile{width:100%;height:2em}.limited-animation .action-tile,.limited-animation .channel-tile,.limited-animation .playlist-tile,.limited-animation .auto-play-tile,.limited-animation .recent-search-tile,.limited-animation .video-tile,.limited-animation .browse-content .list .placeholder-tile,.search .placeholder-tile,.settings .placeholder-tile,.shelf .placeholder-tile{display:inline-block;margin-right:1.1em;position:relative;vertical-align:top}.limited-animation .shelves{margin-top:2.5%}.limited-animation .playlist-tile .overlay,.limited-animation .video-tile .overlay,.limited-memory .playlist-tile .overlay,.limited-memory .video-tile .overlay{opacity:1}.limited-memory .auto-play-tile .video-tile{margin:0}.limited-animation .auto-play-tile .post-play-countdown{top:-4em}.limited-animation .hide-background.video-tile .video-thumb{background-image:url(img/icon-playbutton.png)!important;background-repeat:no-repeat;opacity:1}.limited-animation .action-tile.focused .content{text-shadow:none}.limited-animation .post-play-countdown{text-shadow:none}.limited-animation #keyboard-grid .button.disabled,.limited-animation #keyboard-grid .button.focused,.limited-animation #letter-suggest .button{background-color:rgba(153,153,153,1)}.limited-animation #search #text-box-background,.limited-animation #search #search-text-entry{background-color:#000}.limited-animation #search-keyboard,.limited-animation #letter-suggest{text-shadow:none}.limited-animation #search-keyboard .disabled,.limited-animation #letter-suggest .button{color:#000;text-shadow:none}.limited-animation #letter-suggest .button.focused,.limited-animation #search-keyboard .button.focused{background-color:#e1e1e1;color:#212121}.limited-animation #transliteration .list .button{border-right-color:#f1f1f1}.limited-animation #transliteration .list .button.focused{background-color:rgba(153,153,153,1)}.limited-animation .toaster .toast-container{background-color:rgba(27,25,26,1)}.limited-animation .title-card,.limited-memory.limited-animation.sets-ui .title-card{background:#000;height:20%}.opera .focused,.opera :focus{outline:invert none medium}.eureka #browse-sets,.eureka #dialog .buttons,.eureka .legend,.eureka #transport-controls{display:none}#eureka-player-controls-container{display:none;position:absolute;top:17em;width:100%}.eureka #eureka-player-controls-container{display:block}.eureka .loading #eureka-player-controls-container{opacity:0}#eureka-player-controls{background-size:100%;border-radius:1em;height:11.5em;margin:0 auto;overflow:hidden;width:11.5em}.eureka #eureka-player-controls{opacity:0}@-webkit-keyframes showAndShrinkPause{from{-webkit-transform:scale(1.5);opacity:0}to{opacity:.7}}@-webkit-keyframes hideAndGrowPlay{from{opacity:.7}to{-webkit-transform:scale(1.5);opacity:0}}.eureka #watch.play #eureka-player-controls{background-image:url(img/player-play.png);-webkit-animation:hideAndGrowPlay linear 0.25s 0s 1 normal none}.eureka #watch.pause #eureka-player-controls{background-image:url(img/player-pause.png);-webkit-animation:showAndShrinkPause linear 0.25s 0s 1 normal none;opacity:.7}.xboxone .action-tile,.xboxone .legend-item.back,.xboxone .legend-item.delete,.xboxone .legend-item.exit,.xboxone .legend-item.home,.xboxone .legend-item.modify,.xboxone .legend-item.reversed-back,.xboxone .legend-item.search,.xboxone .player-controls div,.xboxone .auto-play-tile,.xboxone .video-stream,.xboxone .video-tile,.xboxone #browse-search-bar,.xboxone #guide.focused .guide-button,.xboxone #player-controls .item,.xboxone #snap-buttons>div{-h5vcc-gesturable:gesture-clickable}.xboxone #browse-sets{-h5vcc-gesturable:gesture-scroll-both}.xboxone #guide.focused .carousel{-h5vcc-gesturable:gesture-scroll-vertical}.xboxone .settings-shelf{-h5vcc-gesturable:gesture-scroll-horizontal}.xboxone #transliteration .button:hover,.xboxone #keyboard-grid .button:hover{background:none;cursor:default}.search-hint{display:none}.xboxone .search-hint,.xbox360 .search-hint{color:#6b6b6b;display:block;font-size:1.4em;line-height:2em}.context-menu-defocuser{background-color:rgba(0,0,0,0.5);height:100%;left:0;position:absolute;top:0;width:100%}.context-menu-list{background-color:#000;height:initial;left:50%;padding-top:2.5em;position:relative;top:50%;-moz-transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%);-o-transform:translate(-50%,-50%);-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);width:30%}.context-menu-list .button{-h5vcc-gesturable:gesture-clickable;border:#000 solid;border-width:0.5em 1em 0.5em 1em;color:#e1e1e1;cursor:pointer;font-family:roboto-regular;font-size:1.5em;height:auto;line-height:2.5em;margin:0;text-align:left;text-indent:1em;transition-duration:200ms;transition-property:background-color,color;transition-timing-function:cubic-bezier(0.4,0,0.2,1);-webkit-transition-duration:200ms;-webkit-transition-property:background-color,color;-webkit-transition-timing-function:cubic-bezier(0.4,0,0.2,1)}.context-menu-list .button:before{font-family:youtube-icons;padding-right:1em}.context-menu-list .button.icon-platform-switch-users{background:#1f1f1f url() no-repeat;background-position:0.5em center;background-size:2em 2em;border:solid #1f1f1f;border-width:2em 1em 2em 1em;height:initial;line-height:initial;margin-top:1em;padding:0.5em 0 0.5em 3em;text-indent:0}.context-menu-list .button.focused{background-color:#e1e1e1;color:#000}.call-to-cast{display:none}.call-to-cast.focused{bottom:0;display:block;left:0;position:absolute;right:0;top:0}.call-to-cast-text{color:#f1f1f1;font-weight:normal;text-shadow:#000 .06em .06em;width:38%}h2.call-to-cast-text{font-size:3.2em;margin-bottom:0.3em;margin-top:0;padding-top:1.5em}h3.call-to-cast-text{font-size:1.7em}.call-to-cast .end-screen{background-position:center center;background-repeat:no-repeat;background-size:cover;display:none;height:100%}.call-to-cast .end-screen.active{display:block}.call-to-cast .end-screen .call-to-cast-text{color:#fff;width:40%}.call-to-cast .end-screen .call-to-cast-text em{color:#0090ff;font-style:normal}.call-to-cast .end-screen h2.call-to-cast-text{margin-bottom:0.5em;padding-top:2em}.call-to-cast .end-screen h3.call-to-cast-text{line-height:1.5em}.call-to-cast .end-screen.left .call-to-cast-text{margin-left:5%}.call-to-cast .end-screen.right .call-to-cast-text{margin-left:50%}.call-to-cast .end-screen .yt-logo,.call-to-cast .end-screen .yt-kids-logo{background-image:url(img/call-to-cast-yt-logo.png);background-repeat:no-repeat;background-size:contain;bottom:8%;height:13.88%;position:fixed;width:100%}.call-to-cast .end-screen.left .yt-logo,.call-to-cast .end-screen.left .yt-kids-logo{background-position:left center;left:4%}.call-to-cast .end-screen.right .yt-logo,.call-to-cast .end-screen.right .yt-kids-logo{background-position:right center;right:4%}.call-to-cast .end-screen .yt-kids-logo{background-image:url(img/yt-kids-logo.png);height:20%}.call-to-cast .end-screen.multi-user{background-image:url(img/call-to-cast-end-screen-multi-user.jpg)}.call-to-cast .end-screen.yt-mix{background-image:url(img/call-to-cast-end-screen-yt-mix.jpg)}.call-to-cast .end-screen.tv-queue{background-image:url(img/call-to-cast-end-screen-tv-queue.jpg)}.call-to-cast .end-screen.kids-promo{background-image:url(img/call-to-cast-end-screen-kids-promo.jpg)}.call-to-cast .end-screen.kids-mother-goose{background-image:url(img/call-to-cast-end-screen-kids-mother-goose.jpg)}.call-to-cast .end-screen.kids-rainbow{background-image:url(img/call-to-cast-end-screen-kids-rainbow.jpg)}.call-to-cast .end-screen.kids-sesame{background-image:url(img/call-to-cast-end-screen-kids-sesame.jpg)}.call-to-cast .end-screen.kids-talking-tom{background-image:url(img/call-to-cast-end-screen-kids-talking-tom.jpg)}.call-to-cast .end-screen.kids-wonderquest{background-image:url(img/call-to-cast-end-screen-kids-wonderquest.jpg)}.call-to-cast .THEME-cl.end-screen.kids-promo h2.call-to-cast-text{width:80%}.call-to-cast .THEME-k.end-screen h3.call-to-cast-text{font-size:3em;line-height:1.4em;margin-top:0;padding-top:10%;padding-left:5%;width:45%}.call-to-cast .end-screen.gaming-heart{background-image:url(img/call-to-cast-end-screen-gaming-heart.jpg)}.call-to-cast .THEME-g.end-screen h3.call-to-cast-text{font-size:2.2em;padding-top:0%;width:100%}.call-to-cast .end-screen.loki{background-image:url(img/call-to-cast-end-screen-loki.jpg)}.call-to-cast .THEME-up.end-screen h3.call-to-cast-text{font-size:2.2em;margin-left:0%;padding-top:17em;text-align:center;width:100%}.call-to-cast .THEME-m.end-screen h2.call-to-cast-text{font-size:2.2em;margin-bottom:0;text-align:center;width:100%}.call-to-cast .THEME-m.end-screen h3.call-to-cast-text{margin-top:0;text-align:center;width:100%}.call-to-cast .THEME-m.end-screen.music-ready{background-image:url(img/call-to-cast-music.jpg)}.call-to-cast .THEME-m.end-screen.music-ready .call-to-cast-logo{background:url(img/yt-music-logo.png) no-repeat center bottom;height:60%}.call-to-cast .THEME-m.end-screen.music-ready h2.call-to-cast-text{padding-top:10%}.call-to-cast .THEME-m.end-screen.music-party{background-image:url(img/call-to-cast-music.jpg);height:100%}.call-to-cast .THEME-m.end-screen.music-party .call-to-cast-logo{background:url(img/call-to-cast-music-party-logo.png) no-repeat center bottom;height:55%}.call-to-cast .THEME-m.end-screen.music-party .footer{background:url(img/yt-music-logo-small.png) no-repeat center top;height:10%}.snap-controls{height:90%;padding:.5em;position:relative}.snapped.blurred #snap-buttons,.snapped.blurred #unsupported-mode,.snapped.blurred #ad-callout,.snapped.blurred .logo-container,.snapped.blurred .title-card,.snapped.blurred .up-next{opacity:.25!important}.snapped #dialog,.snapped #guide,.snapped #search,.snapped #settings,.snapped #title-tray,.snapped #transport-controls,.snapped .ad-showing .video-ads,.snapped .advertisement-info,.snapped .application-message,.snapped .browse,.snapped .browse-sets,.snapped .caption-window,.snapped .countdown-ad-callout,.snapped .html5-video-info-panel,.snapped .legend,.snapped .player-video-avatar,.snapped .quality-status,.snapped .skip-ad-button,.snapped .skip-ad-callout,.snapped .toaster,.snapped.blurred.browse-sets-state .title-card,.snapped.blurred.search-state .title-card,.snapped.blurred.settings-state .title-card,.snapped.dialog-focused #snap-progress-bar,.snapped.dialog-focused #watch{display:none!important}.snapped .advertisement-tooltip{color:#a0a0a0;font-size:.4em;left:0;top:0}.snapped .advertisement-tooltip .remaining_duration{color:#717171}.snapped #ad-callout{left:5%;top:18%}.snapped .debug-watermark{font-size:.2em;width:100%}#app-markup.snapped{background-color:#231f20}.snapped #background{display:none}.snapped{font-size:2em}.snapped.watch-state .logo-container{opacity:inherit}.snapped .icon-youtube-logo:before{content:''}.snap-controls .logo-container{background:url(img/yt-logo-fullcolor.png) no-repeat center top;display:inherit;height:2.5em;left:0;position:absolute;right:0;top:5%}.snapped .ad-video,.snapped .ad-created .video-stream{height:270px!important;width:480px!important}.snapped .video-stream,.snapped .html5-video-content{-webkit-transform:scale(.9)!important;max-height:5.6em;top:4.4em!important}.snapped .html5-video-controls{top:9.8em!important}.snapped .player-video-title{color:#a0a0a0;font-size:.7em;line-height:1.1em;margin:0;max-height:2.2em;white-space:normal;width:12em}.snapped .player-meta{left:0;margin:0;position:inherit;top:0}.snapped .player-meta .player-video-text{padding-left:0}.snapped .player-meta .player-video-details{color:#717171;font-size:.5em;line-height:1.1em}.snapped .player-meta .player-video-details>div{margin-left:0}.snapped .player-video-details .uploaded-date,.snapped .player-video-details .set-context,.snapped .player-video-details .view-count{font-size:.9em;margin-top:0}.watch-state.snapped #snap-progress-bar{display:block}#snap-progress-bar{background-position:top left;display:none;height:.1em;left:0;margin-top:9.25em;padding:0;position:relative;top:0;width:100%}#snap-progress-bar .progress-bar-disc,#snap-progress-bar .progress-bar-playhead{display:none}#snap-progress-bar div{height:5px;top:0}.snapped .title-card{background:none;border:none;height:initial;padding-top:.3em;position:inherit}#unsupported-mode{color:#fff;font-size:.9em;line-height:1.2em;padding:80% 1em 0;width:8em}.snap-controls .mute{background-image:url(img/icon-mute.png)}.snap-controls .mute.toggle-selected{background-image:url(img/icon-unmute.png)}.snap-controls .fullscreen{background-image:url(img/icon-fullscreen.png)}.snapped .loading-indicator{height:5em;width:5em}.snapped #spinner{top:19%;-o-transform:scale(.5);-webkit-transform:scale(.5);transform:scale(.5)}.engaged.snapped .engagement-indicator{display:inline-block;font-size:.6em!important;left:0;margin-left:auto;margin-right:auto;position:absolute;right:0;text-align:center;top:4.2em!important}.engaged.snapped .engagement-indicator .stop-listening{background:transparent}.snap-controls #snap-buttons{bottom:0;position:absolute}.snap-controls #snap-buttons .focused,.snap-controls #snap-buttons :hover{-webkit-border-radius:.15em;background-color:#fff;color:#000}.snap-controls #snap-buttons .button,.snap-controls #snap-buttons .toggle-button{display:inline-block;font-size:.8em;height:1em;margin-left:.5em;padding:1em;position:relative;text-align:center;top:0;width:1em}.snap-controls #snap-buttons div{color:#fff;cursor:pointer;vertical-align:middle}.snap-controls #snap-buttons div.disabled:hover{background-color:transparent;color:#fff}.snap-controls #snap-buttons div.focused{opacity:1}.snap-controls #snap-buttons div.disabled{opacity:.2}.snap-controls .speakable span,.snap-controls .disabled span{display:none}.engaged .snap-controls .speakable:not(.disabled) span{color:#5dc21e;display:block;font-size:.6em;left:0;overflow:hidden;pointer-events:none;position:absolute;text-align:center;top:-1.5em;width:100%;word-break:break-all}.lang-case-sensitive .snap-controls .speakable span:first-letter{text-transform:uppercase}.snap-controls .icon-player-play{font-family:'youtube-icons'}.snap-controls .icon-mute,.snap-controls .icon-fullscreen{background-position:center center;background-repeat:no-repeat;background-size:3em}.snap-controls .icon-mute,.snap-controls .icon-mute.disabled{background-image:url(img/button-unmute-active.png)}.snap-controls .icon-mute.focused,.snap-controls .icon-mute:hover:not(.disabled){background-image:url(img/button-unmute-onhover-active.png)}.snap-controls .icon-mute.toggle-selected{background-image:url(img/button-mute-active.png)}.snap-controls .icon-mute.toggle-selected.focused,.snap-controls .icon-mute.toggle-selected:hover{background-image:url(img/button-mute-onhover-active.png)}.snap-controls .icon-fullscreen{background-image:url(img/button-fullscreen-active.png)}.snap-controls .icon-fullscreen.focused,.snap-controls .icon-fullscreen:hover{background-image:url(img/button-fullscreen-onhover-active.png)}.up-next{height:3em;padding-top:1em}.up-next div{color:#a0a0a0;font-size:.6em}.up-next .video-title{height:1.2em;line-height:1.2em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.up-next .video-thumb{background:no-repeat center/100%;display:inline-block;height:100%;margin-top:.2em;max-height:2.5em;vertical-align:top;width:5em}#browse-sets{background-color:#222;height:100%;left:0;overflow:hidden;position:absolute;right:0}#browse-sets.no-background,.limited-memory #browse-sets{background-color:rgba(0,0,0,0)}#browse-search-bar{background-color:rgba(153,153,153,.2);cursor:pointer;height:3em;left:8em;margin-right:18em;position:absolute;right:2.5em;top:2.5em}.limited-animation #browse-search-bar{background-color:#4f575a}#browse-search-bar.focused,#browse-search-bar:hover{background:#fff}#browse-search-bar .icon{color:rgba(255,255,255,.4);display:block;font-family:'youtube-icons';font-size:1.8em;margin:0;padding:.35em 0 0 .5em;text-align:left}.limited-animation #browse-search-bar .icon{color:#e1e1e1}.youtube-logo-top{height:3.4em;position:absolute;right:9.5em;top:2.3em;width:8.4em;font-family:'youtube-icons'}#browse-sets.has-header-content .youtube-logo-top{display:none}.youtube-logo:before{color:rgba(153,153,153,.5);display:block;font-size:3.4em}.youtube-unlimited-logo:before{color:rgba(153,153,153,.5);display:none;font-size:3.4em;position:relative;right:.5em}.unlimited .youtube-logo:before{display:none}.unlimited .youtube-unlimited-logo:before{display:block}.limited-animation .youtube-unlimited-logo:before,.limited-animation .youtube-logo:before{color:#4f575a}#browse-search-bar.focused .icon,#browse-search-bar:hover .icon{color:#444}#platform-user-icon{background-position:center;background-repeat:no-repeat;background-size:contain;height:4em;position:absolute;right:3em;top:2em;width:4em}#browse-header{background-position:0 -8em;background-size:cover;height:60%;position:relative}.limited-memory.limited-animation #browse-header{background-position:6em 0;background-repeat:no-repeat;background-size:contain}.no-background #browse-header{background-image:none!important}.browse-sets #browse-header.collapsed{-o-transform:translateY(-27%);-webkit-transform:translateY(-27%);transform:translateY(-27%)}.limited-memory .browse-sets #browse-header.collapsed{top:-7em;-o-transform:none;-webkit-transform:none;transform:none}#browse-header .title{color:#e1e1e1;display:inline-block;font-size:2.25em;margin-bottom:-.23em;overflow:hidden;text-overflow:ellipsis;-o-transform-origin:left;-webkit-transform-origin:left;transform-origin:left;white-space:nowrap;width:23.7em}#browse-header.one-button .title{width:18.7em}#browse-header.two-buttons .title{width:14em}#browse-header.collapsed .title{overflow:visible;-o-transform:scale(.8,.8) translateY(-5em) translateX(-1.5em);-webkit-transform:scale(.8,.8) translateY(-5em) translateX(-1.5em);transform:scale(.8,.8) translateY(-5em) translateX(-1.5em)}.browse-header-gradient{background:-o-linear-gradient(top,rgba(34,34,34,0) 0%,rgba(34,34,34,0) 15%,rgba(34,34,34,1) 100%);background:-webkit-linear-gradient(top,rgba(34,34,34,0) 0%,rgba(34,34,34,0) 15%,rgba(34,34,34,1) 100%);background:linear-gradient(to bottom,rgba(34,34,34,0) 0%,rgba(34,34,34,0) 15%,rgba(34,34,34,1) 100%);height:100%;width:100%}.limited-memory .browse-header-gradient{display:none}.no-background .browse-header-gradient{visibility:hidden}.browse-header-metadata{left:8em;position:absolute;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.limited-memory.limited-animation .browse-header-metadata{top:11.6em}.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata{font-size:inherit;left:8em;top:11em}.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata .browse-header-avatar{height:4em;margin-right:1em;width:4em}.browse-header-avatar{background-size:contain;display:inline-block;height:5em;margin-right:1.3em;-o-transform-origin:left;-webkit-transform-origin:left;transform-origin:left;width:5em}#browse-header.collapsed .browse-header-avatar{-o-transform:scale(.61,.61) translateY(-13.5em);-webkit-transform:scale(.61,.61) translateY(-13.5em);transform:scale(.61,.61) translateY(-13.5em)}#browse-header.collapsed .browse-header-button-bar{-o-transform:translateY(-6.25em);-webkit-transform:translateY(-6.25em);transform:translateY(-6.25em);opacity:0}.browse-header-button-bar{background:rgba(0,0,0,.4);border-radius:.15em;font-size:1.1em;height:2.4em;margin-bottom:-.59em;padding:.59em;position:absolute;right:3.5em}.limited-animation .browse-header-button-bar{background:#1f2426}.limited-memory.limited-animation .browse-header-button-bar{top:13em}.browse-header-button-bar,.browse-header-metadata{bottom:3.9em}.browse-header-button-bar .button{border-radius:.12em;color:#e1e1e1;cursor:default;display:inline-block;height:2.4em;min-width:8.2em;overflow:hidden;padding-right:1em;white-space:nowrap}.browse-header-button-bar .button span{line-height:2.4em;vertical-align:middle}.browse-header-button-bar .button.focused,.browse-header-button-bar .button.focused:hover{background:#e1e1e1;color:#212121}.browse-header-button-bar .button:hover{background-color:#666}.browse-header-button-bar .button .icon{display:inline-block;font-family:'youtube-icons';height:2.4em;margin:0 1em 0 1em}.browse-header-subscribe .icon:before{font-size:2em}.browse-header-subscribe.toggle-selected .icon:before{content:"\00e602";font-size:1em}.browse-header-subscribe.toggle-selected.focused{color:#ce292d}.browse-header-subscribe.disabled{background-color:rgba(0,0,0,0)}.browse-content{height:80%;left:8em;position:absolute;top:14.5%;width:100%}.browse-sets.collapsed .browse-content{-o-transform:translateY(44%);-webkit-transform:translateY(44%);transform:translateY(44%)}.limited-memory .browse-sets.collapsed .browse-content{top:20em;-o-transform:none;-webkit-transform:none;transform:none}#browse-header,.browse-header-avatar,.browse-header-button-bar,.browse-content,#browse-header .title{-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0);-o-transition:-o-transform .25s;-webkit-transition:-webkit-transform .25s;transition:-webkit-transform .25s}.browse-header-button-bar{-o-transition:opacity .25s -o-transform .25s;-webkit-transition:opacity .25s,-webkit-transform .25s;transition:opacity .25s,transform .25s}.limited-animation #browse-header,.limited-animation .browse-header-avatar,.limited-animation #browse-header.collapsed .browse-header-avatar,.limited-animation .browse-content,.limited-animation .browse-header-button-bar,.limited-animation #browse-header .title,.limited-animation .browse-content .shelves,.limited-animation .browse-header-metadata,.limited-animation .shelf #content-container,.limited-animation .shelves>.title,.limited-animation .shelf>.title,.limited-animation .horizontal-list>.content,.limited-animation .horizontal-list,.limited-animation .shelves .carousel{-o-transition:all 0;-webkit-transition:none;transition:none;-o-transform:none;-webkit-transform:none;transform:none}.limited-animation #browse-header.collapsed .browse-header-metadata{font-size:.6em;left:13.25em;top:17.75em}.limited-animation #browse-header.collapsed .browse-header-metadata .title{font-size:3em}.limited-memory #browse-header.collapsed .browse-header-metadata .title{font-size:1.8em}.limited-animation .browse-content .list{margin-left:-9.5em;width:126em}.limited-animation .browse-content .shelf>.title{margin-left:6em}.limited-animation.sets-ui .action-tile:not(.focused),.limited-animation.sets-ui .auto-play-tile:not(.focused) .video-tile,.limited-animation.sets-ui .channel-tile:not(.focused),.limited-animation.sets-ui .playlist-tile:not(.focused),.limited-animation.sets-ui .recent-search-tile:not(.focused),.limited-animation.sets-ui .video-tile:not(.focused),.roku.limited-animation.sets-ui .action-tile:hover:not(.focused),.roku.limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile,.roku.limited-animation.sets-ui .channel-tile:hover:not(.focused),.roku.limited-animation.sets-ui .playlist-tile:hover:not(.focused),.roku.limited-animation.sets-ui .video-tile:hover:not(.focused){background-color:#212121}.limited-animation.sets-ui .action-tile:hover:not(.focused),.limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile,.limited-animation.sets-ui .channel-tile:hover:not(.focused),.limited-animation.sets-ui .playlist-tile:hover:not(.focused),.limited-animation.sets-ui .recent-search-tile:hover:not(.focused),.limited-animation.sets-ui .video-tile:hover:not(.focused){background-color:#414141}.browse-content .shelves{margin-left:0em;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.browse-content .shelves>.no-content-message,.browse-content .horizontal-list>.no-content-message{margin-left:-8em}.shelves>.no-content-message,.horizontal-list>.no-content-message{display:none;position:absolute;top:8em;width:100%}.shelves.no-content>.no-content-message,.horizontal-list.no-content>.no-content-message{display:block}.shelves>.no-content-message .text,.horizontal-list>.no-content-message .text{color:#f1f1f1;font-size:1.8em;text-align:center;text-shadow:#000 .04em .04em}.shelf{width:100%}.limited-animation .shelf{margin-bottom:1.8em}.carousel .shelf{position:absolute}.shelf #content-container{-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.shelves>.title,.shelf>.title{color:#999;font-size:1.6em;margin-bottom:1.0em;margin-top:.2em;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0);white-space:nowrap}.shelves>.title,.shelf.selected>.title{color:#fff}.shelf>.title .annotation{color:#777;font-size:70%;margin-left:.5em}.shelf.selected>.title .annotation{color:#ddd}.horizontal-list.no-model,.shelf.no-model,.survey-shelf.no-model{display:none}.shelf>.icon{display:none}.horizontal-list>.content{font-size:79%;height:26em;opacity:1;-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.horizontal-list.focused>.content{opacity:1}.horizontal-list,.shelves .carousel,.browse-header-metadata{-o-transform:translateZ(0);-webkit-transform:translateZ(0);transform:translateZ(0)}.shelf0to0{opacity:1;-webkit-transform:translateY(0%) scale(1);-o-transform:translateY(0%) scale(1)}@-webkit-keyframes shelf0to1-anim{from{-webkit-transform:translateY(0%)}to{-webkit-transform:translateY(100%)}}@-o-keyframes shelf0to1-anim{from{-o-transform:translateY(0%)}to{-o-transform:translateY(100%)}}.shelf0to1{-webkit-animation:shelf0to1-anim 200ms forwards;-o-animation:shelf0to1-anim 200ms forwards}@-webkit-keyframes shelf0to2-anim{from{opacity:1;-webkit-transform:translateX(0%) translateY(0%) scale(1.0)}100%{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75)}}@-o-keyframes shelf0to2-anim{from{opacity:1;-o-transform:translateX(0%) translateY(0%) scale(1.0)}100%{opacity:0;-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}}.shelf0to2{-webkit-animation:shelf0to2-anim 200ms forwards;-o-animation:shelf0to2-anim 200ms forwards}@-webkit-keyframes shelf1to0-anim{from{-webkit-transform:translateX(0%) translateY(100%)}to{-webkit-transform:translateX(0%) translateY(0%)}}@-o-keyframes shelf1to0-anim{from{-o-transform:translateX(0%) translateY(100%)}to{-o-transform:translateX(0%) translateY(0%)}}.shelf1to0{-webkit-animation:shelf1to0-anim 200ms forwards;-o-animation:shelf1to0-anim 200ms forwards}.shelf1to1{opacity:1;-webkit-transform:translateX(0%) translateY(100%) scale(1);-o-transform:translateX(0%) translateY(100%) scale(1)}@-webkit-keyframes shelf1to2-anim{from{-webkit-transform:translateX(0%) translateY(100%)}99%{-webkit-transform:translateX(0%) translateY(200%)}100%{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75)}}@-o-keyframes shelf1to2-anim{from{-o-transform:translateX(0%) translateY(100%)}99%{-o-transform:translateX(0%) translateY(200%)}100%{opacity:0;-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}}.shelf1to2{-webkit-animation:shelf1to2-anim 200ms forwards;-o-animation:shelf1to2-anim 200ms forwards}@-webkit-keyframes shelf2to0-anim{from{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75)}to{opacity:1;-webkit-transform:translateX(0%) translateY(0%) scale(1.0)}}@-o-keyframes shelf2to0-anim{from{opacity:0;-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}to{opacity:1;-o-transform:translateX(0%) translateY(0%) scale(1.0)}}.shelf2to0{-webkit-animation:shelf2to0-anim 200ms forwards;-o-animation:shelf2to0-anim 200ms forwards}@-webkit-keyframes shelf2to1-anim{from{opacity:1;-webkit-transform:translateX(0%) translateY(200%)}to{opacity:1;-webkit-transform:translateX(0%) translateY(100%)}}@-o-keyframes shelf2to1-anim{from{opacity:1;-o-transform:translateX(0%) translateY(200%)}to{opacity:1;-o-transform:translateX(0%) translateY(100%)}}.shelf2to1{-webkit-animation:shelf2to1-anim 200ms forwards;-o-animation:shelf2to1-anim 200ms forwards}.shelf2to2{opacity:0;-webkit-transform:translateX(-2%) translateY(-11%) scale(0.75);-o-transform:translateX(-2%) translateY(-11%) scale(0.75)}.limited-memory .shelves .list .video-tile:nth-child(1) .video-thumb,.limited-memory .shelves .list .channel-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #search .horizontal-list .list .video-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #search .horizontal-list .list .channel-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #browse .list .video-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #browse .list .channel-tile:nth-child(1) .video-thumb,.limited-memory.sets-ui #browse .list .video-tile:last-child .video-thumb,.limited-memory.sets-ui #browse .list .channel-tile:last-child .video-thumb{background:none!important}.survey-shelf{position:absolute}.survey-shelf>.title{color:#fff;display:inline-block;font-size:1.6em;margin-bottom:1.0em;margin-top:0.2em}.survey-shelf .action-tile .content>.title{display:none}.survey-shelf .horizontal-list>.content{font-size:79%;height:26em}.survey-shelf .description{color:#fff;visibility:visible}.survey-shelf .button{display:inline-block;margin-bottom:1em;margin-left:2em}.survey-shelf .sliding-highlighter{height:8em;width:8em}.survey-shelf .action-tile,.exp-densityBrowse .survey-shelf .action-tile{border:0;height:8em;width:8em}.survey-shelf .action-tile .content{height:8em;width:8em}.survey-shelf .action-tile .description{color:#777;font-size:1.2em;margin-top:-1.3em;opacity:1;white-space:nowrap}.exp-densityBrowse .survey-shelf.focused .action-tile .description{display:block}.exp-densityBrowse .survey-shelf .action-tile .description{display:none}.survey-shelf .action-tile .large-action-icon,.exp-densityBrowse .survey-shelf .action-tile .large-action-icon{background-color:transparent;font-size:5em;margin-top:.26em;padding-right:.2em}.survey-shelf .action-tile.selected .large-action-icon,.exp-densityBrowse .survey-shelf .action-tile.selected .large-action-icon{color:#fff}.survey-shelf .action-tile.focused .large-action-icon,.exp-densityBrowse .survey-shelf .action-tile.focused .large-action-icon{color:#222}.survey-shelf .button.focused{background-color:#fff;border-radius:.1em;color:#222;padding:.2em}.survey-shelf .button{color:#777}.limited-animation .survey-shelf{margin-bottom:5em;position:relative}.limited-animation .survey-shelf>.title{margin-left:6em}.limited-animation .exp-densityBrowse .survey-shelf>.title{margin-left:5em}.limited-animation .survey-shelf .horizontal-list{margin-left:17.5em}.limited-animation .exp-densityBrowse .survey-shelf .horizontal-list{margin-left:13.5em}.limited-animation .exp-densityBrowse .survey-shelf .action-tile .large-action-icon{margin-top:.12em}.limited-animation .exp-densityBrowse .survey-shelf .action-tile .description{display:block}#guide{box-shadow:.1em 0 1em 0em black;height:100%;left:0;overflow:hidden;position:absolute;-o-transform:translateX(-23em);-webkit-transform:translateX(-23em) translateZ(0);transform:translateX(-23em) translateZ(0);-o-transition:-o-transform 400ms cubic-bezier(0.4,0.0,0.2,1);-webkit-transition:-webkit-transform 400ms cubic-bezier(0.4,0.0,0.2,1);transition:transform 400ms cubic-bezier(0.4,0.0,0.2,1);width:28em}.limited-memory.limited-animation #guide{box-shadow:none;-o-transform:none;-webkit-transform:none;transform:none}.limited-memory #guide.focused{border-right:none}#guide.focused{-o-transform:translateX(0);-webkit-transform:translateX(0);transform:translateX(0)}#guide:hover{background-color:rgba(255,255,255,.2)}.limited-animation #guide:hover{background:none}.limited-animation #guide,.limited-animation #guide #user-info-background,.limited-animation .guide-carousel-background{-o-transition:none;-webkit-transition:none;transition:none}.guide-carousel-background{background-color:rgba(0,0,0,.2);height:100%;left:0em;position:absolute;top:0em;width:100%;-o-transition:background-color 400ms;-webkit-transition:background-color 400ms;transition:background-color 400ms}.limited-animation .guide-carousel-background,.limited-animation #guide #user-info-background{background-color:#1f2426}.limited-animation #guide:hover .guide-carousel-background,.limited-animation #guide:hover #user-info-background{background-color:#384145}.limited-animation.limited-memory .guide-carousel-background,.limited-animation.limited-memory #guide #user-info-background{background-color:#df2323}.limited-memory .guide-carousel-background,.limited-memory #guide #user-info-background,#guide .list{display:none}.limited-memory #guide.focused .guide-carousel-background,.limited-memory #guide.focused.logged-in #user-info-background,#guide.focused .list{display:block}.logged-in .guide-carousel-background{top:8.5em}#guide.focused .guide-carousel-background,#guide.focused:hover .guide-carousel-background{background-color:#df2323}.collapsed-guide,#guide.focused .collapsed-guide{display:none}.collapsed-guide-icons{color:#85888a;font-size:1.6em;left:15em;opacity:1;position:absolute;top:7.5em}.collapsed-guide-icon{font-family:'youtube-icons';margin-top:1em;margin-bottom:1em;text-align:center;width:2em}#guide .collapsed-guide-icons{-o-transition:opacity 150ms 450ms;-webkit-transition:opacity 150ms 450ms;transition:opacity 150ms 450ms}.limited-memory .collapsed-guide-icons{left:1em}.limited-animation #guide .collapsed-guide-icons{-o-transition:none;-webkit-transition:none;transition:none}#guide.focused .collapsed-guide-icons{opacity:0;-o-transition:none;-webkit-transition:none;transition:none}#guide .collapsed-guide-icon.icon-guide-my-subs{display:none}#guide.logged-in .collapsed-guide-icon.icon-guide-my-subs{display:block}#guide.logged-in .collapsed-guide-icon.icon-popular{display:none}.collapsed-guide-icon.icon-music{font-size:.925em;padding-left:.0375em}.limited-memory .collapsed-guide{background-color:#1f2426;border-right:.2em solid #111;display:block;height:100%;left:0;width:6em}#error-message{display:none}#guide.error.focused #error-message{color:#fff;display:block;font-size:2em;padding:2em;position:absolute;text-align:center;top:12em}#guide .sliding-highlighter{display:none;width:100%;height:4.2em;opacity:0}#guide.focused .sliding-highlighter{opacity:1}#guide.focused .sliding-highlighter{display:block}#guide.focused #user-info-background{visibility:visible}#guide #user-info-background{background-color:rgba(0,0,0,.2);-o-transition:background-color 400ms;-webkit-transition:background-color 400ms;transition:background-color 400ms}#guide.focused #user-info-background,#guide.focused:hover #user-info-background{background-color:#931717}.logged-in #user-info-background{display:block}#guide.focused .guide-user-text{visibility:visible}#guide .carousel,#guide .list,#guide .sliding-highlighter{color:#fff;margin-top:2em}#guide.logged-in .carousel,#guide.logged-in .list,#guide.logged-in .sliding-highlighter{margin-top:1em}#guide .carousel.hidden{display:block!important;visibility:hidden}#guide .list{position:relative}.carousel .guide-button{position:absolute}.list .guide-button{margin-bottom:.1em}.guide-button{font-size:1.6em;height:1.83em;overflow:hidden;padding:.5em .27em .3em 2.9em;white-space:nowrap}.guide-button:hover{background:#900;cursor:pointer;padding-right:1.78em}.guide-button.selected:hover{background:transparent}.guide-button.disabled:hover{background:transparent;cursor:inherit;padding-right:inherit}.guide-button.disabled{padding-left:2.1em;text-transform:uppercase}.guide-button.disabled.footer{text-transform:none}.guide-button-icon{color:#ef9191;display:inline-block;font-family:'youtube-icons';font-size:1.2em;margin-top:.2em;text-align:center;width:1.8em}.guide-button.disabled .guide-button-icon{display:none}.guide-user-text,.guide-button-title{color:#fbdada;display:inline-block;line-height:1.7em;overflow:hidden;padding-left:.5em;text-overflow:ellipsis;vertical-align:top}.guide-button.disabled .guide-button-title{color:#ef9191}.guide-user-text{visibility:hidden;margin-left:-0.4em;position:relative;top:30%;text-overflow:ellipsis;width:9.5em}.guide-button-title{width:11em}.engaged .guide-button-title{width:8em}.guide-button.footer .guide-button-title{font-size:75%;padding-top:.8em;width:21.15em}.guide-button-icon .image,#guide-user-avatar{background:no-repeat center;background-size:100%;height:1em;width:1em}.guide-button-icon .image{background-color:#fff;box-shadow:0 0 0 1px #ef9191;margin:0 .4em 0 .4em}.guide-button.focused .guide-button-icon .image{box-shadow:none}.guide-button .image{display:none}.guide-button.has-image .image{display:block}#guide-user-avatar{border-radius:50%;box-shadow:0 0 0 .05em rgba(239,145,145,.4),0 0 .05em #ef9191;display:inline-block;font-size:2.31em;margin:.2em .2em .2em .4em}#guide-user-avatar,.guide-user-text,.guide-button-icon,.guide-button-title{-o-transition:color 50ms;-webkit-transition:color 50ms;transition:color 50ms;transition-delay:25ms}.no-transition .guide-button .guide-button-icon,.no-transition .guide-button .guide-button-title,.limited-animation .guide-button .guide-button-icon,.limited-animation .guide-button .guide-button-title,.limited-animation #guide-user-avatar,.limited-animation .guide-user-text{-o-transition:none;-webkit-transition:none;transition:none}.guide-button.focused .guide-button-icon,.guide-button.focused .guide-button-title{color:#df2323}.limited-animation .guide-button.focused{background-color:#fff}.user-info-container{height:2.6em;padding:1.1em 0em 0em 1.8em;font-size:1.6em;white-space:nowrap}#user-info-background{display:none;height:8.53em;position:relative;width:inherit;z-index:1}.sliding-highlighter .select{background-color:rgba(0,0,0,0.8);display:none;height:2.9em;min-width:3.5em;padding:1.3em 0.6em 0em 0.6em;position:absolute;right:0;text-align:center}.engaged .guide .sliding-highlighter .select{display:block}.unlimited .guide-user-text{line-height:1.0em}.guide-user-unlimited{font-size:0.8em;color:#a88;text-transform:uppercase}#settings{height:100%;overflow:visible;position:absolute;right:0;left:4.5em}.settings-shelf{height:24em;margin-left:3.5em;margin-top:1em;position:absolute;top:19%;width:100%}.settings-title{color:#fff;font-size:1.2em;line-height:3em;white-space:nowrap}.limited-animation .settings .content .list{width:130em}.limited-animation #settings-items{margin-left:-17em}.settings-horizontal-list>.content{font-size:79%}.settings-horizontal-list>.no-content-message{display:none}.pointer-overlay{display:block}.pointer-overlay .nav-arrow{background-image:url(img/motion-control-sprite.png);background-repeat:no-repeat;background-size:100%;cursor:pointer;display:none;height:5em;opacity:.5;position:absolute;width:5em}.pointer-overlay.enabled .nav-arrow{display:block}.pointer-overlay .nav-arrow:hover{opacity:1}.pointer-overlay .up-arrow{background-position:0 100%;left:45%;top:18%}.pointer-overlay .down-arrow{background-position:0 0%;bottom:11%;left:45%}.pointer-overlay .left-arrow{background-position:0 33.3%;top:50%;left:5%}.settings-focused .pointer-overlay .left-arrow,.browse-sets-state .pointer-overlay .left-arrow,.search-state .pointer-overlay .left-arrow{left:7%}.pointer-overlay .right-arrow{background-position:0 66.7%;top:50%;right:5%}#search.input-open+.pointer-overlay .up-arrow,.post-play-state .pointer-overlay .up-arrow,.post-play-state .pointer-overlay .down-arrow{display:none}.watch-state .pointer-overlay .down-arrow{bottom:2%}.search-state.guide-focused .pointer-overlay .up-arrow{top:20%}@media screen and (aspect-ratio:5/4){#dialog.browse-sets #dialog-wrapper{padding:1.3em 2em}.flag-list-container.flag-options-dialog{font-size:.875em}}@media screen and (max-aspect-ratio:4/3){.player-controls #button-list{font-size:.875em}#transport-controls.ad-active .player-controls-widget .player-controls #button-list{font-size:1em}.fresh-transport-controls .progress-bar{width:70%}.fresh-transport-controls #player-time-elapsed,.fresh-transport-controls .player-time-total{font-size:1.1em;width:10%}}@media screen and (aspect-ratio:4/3){#browse-header .title{width:18.3em}#browse-header.one-button .title{width:13.2em}#browse-header.two-buttons .title{width:8.5em}.sets-ui .flag-list.grid{font-size:0.8em}.flag-claim{font-size:1.4em}#search .search-pairing{font-size:0.7em}.sets-ui .debug-dialog{font-size:0.8em}.voice-footer .list{padding-top:0;width:16em}}@media screen and (min-width:3840px){.player-controls{top:21px}}@media screen and (min-width:1919px){.opera .video-stream{height:1080px;width:1920px}.watch-video-tile,.watch-list .button{padding:10px}}@media screen and (min-width:640px) and (max-width:1024px) and (max-height:576px){.countdown-ad-callout{font-size:1.3em;right:10%}.opera .video-stream{height:576px;width:1024px}#keyboard-grid .button{width:.7em}#dialog-wrapper{padding-left:4em;padding-right:4em}.pairing{-moz-transform-origin:0 50%;-ms-transform-origin:0 50%;-o-transform-origin:0 50%;-webkit-transform-origin:0 50%;-moz-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);-webkit-transform:scale(.7)}.browse-sets #browse-header.collapsed{-o-transform:translateY(-19%);-webkit-transform:translateY(-19%);transform:translateY(-19%)}}@media screen and (max-width:720px) and (max-height:480px){.countdown-ad-callout{font-size:.9em;right:5%}.skip-ad-callout{right:3%}.opera .video-stream{height:480px;width:720}#search .pairing .alternatives{margin:0 0 0 1em}#keyboard-grid .button{width:.8em}#search .pairing .search-message .title{margin-top:0.7em}#dialog-view .pairing{font-size:0.8em;margin-top:2em}.watch-list .list{margin-left:-4em}}@media screen and (max-width:640px) and (max-height:480px){.opera .video-stream{height:480px;width:640px}#keyboard-grid .button{width:.7em}#dialog-view .reset-help{display:block;width:27em}.watch-video-tile,.watch-list .button{padding:4px}.browse-header-metadata{bottom:3.9em}.browse-sets #browse-header.collapsed{-o-transform:translateY(-27%);-webkit-transform:translateY(-27%);transform:translateY(-27%)}.voice-footer .list{font-size:.6em;margin-left:35%;padding-top:-3em;width:35%}.engaged .engagement-indicator{display:inline-block;font-size:1.3em;height:3em;margin-bottom:1.5em}.engaged .engagement-indicator .title{display:inline-block}.engagement-indicator .stop-listening .icon{display:inline-block;height:3em;left:0px;top:0px;width:15%}}@media screen and (min-height:1080px) and (max-width:1440px){.video-tile-container{-moz-transform:scale(.7);-ms-transform:scale(.7);-o-transform:scale(.7);-webkit-transform:scale(.7);transform:scale(.7);-moz-transform-origin:top right;-ms-transform-origin:top right;-o-transform-origin:top right;-webkit-transform-origin:top right;transform-origin:top right}.player-controls #button-list .button,.player-controls #button-list .toggle-button{margin-right:.2em;margin-left:.2em}.fresh-transport-controls .progress-bar{width:59%}.fresh-transport-controls #player-time-elapsed,.fresh-transport-controls .player-time-total{font-size:1em;width:14%}.fresh-transport-controls .button,.fresh-transport-controls .toggle-button{font-size:1.1em}.fresh-transport-controls #transport-more-button{font-size:1.7em}#dialog-wrapper{padding:1.3em 3em}.dialog-contents{font-size:95%}#dialog-wrapper .connection-steps{padding:0}#dialog-wrapper .pairing .qr-code,#dialog-wrapper .pairing .connected-list{margin:.2em}.context-menu-list{left:30%;right:30%}.voice-footer .list{font-size:0.65em;padding-left:22em;padding-right:18em;padding-top:1.3em}}.sets-ui .carousel .item,.sets-ui .carousel .channel-tile,.sets-ui .carousel .auto-play-tile{background-color:inherit!important}.sets-ui .carousel .item:hover,.sets-ui .carousel .channel-tile:hover,.sets-ui .carousel .auto-play-tile:hover{background-color:rgba(255,255,255,.1)!important}.sets-ui .tile .channel-bottom>.title,.sets-ui .tile .tile-bottom>.title{color:#e1e1e1}.sets-ui .tile .channel-bottom>.details,.sets-ui .tile .tile-bottom>.details{color:#646464}.sets-ui .tile.focused.selected .channel-bottom>.title,.sets-ui .tile.focused.selected .tile-bottom>.title{color:#212121}.sets-ui .tile.focused.selected .channel-bottom>.details,.sets-ui .tile.focused.selected .tile-bottom>.details{color:#8d8d8d}.sets-ui #transport-controls .player-controls #button-list div.icon-player-more,.sets-ui #transport-controls .player-controls #button-list div.icon-player-less{color:#fff}.sets-ui #transport-controls .player-controls #button-list div.icon-player-more.focused,.sets-ui #transport-controls .player-controls #button-list div.icon-player-less.focused{color:#222}.sets-ui .settings-title{font-size:1.5em}.sets-ui .action-tile .title{font-size:2.4em;margin-left:.1em;margin-right:.1em}.sets-ui .flag-list.grid{margin:3.25em}.sets-ui .flag-list .list{text-align:left}.sets-ui .flag-list .button{width:14em;text-align:center}.sets-ui .flag-example{top:20%}.sets-ui .flag-video{margin-left:2em;text-align:left}.sets-ui .flag-claim .privacy-invasion{margin:auto;width:50%}.sets-ui .authentication-error-dialog,.sets-ui .delete-video-error,.sets-ui .missing-channel-error,.sets-ui .server-unavailable,.sets-ui .network-error-dialog{margin-top:1em}.sets-ui .eureka-authorization-dialog .icon,.sets-ui .eureka-player-error-dialog .icon{margin-left:3em}.sets-ui .eureka-authorization-dialog .info,.sets-ui .eureka-player-error-dialog .info{width:50%}.sets-ui .debug-dialog{padding:0 1em;text-align:left}.sets-ui .text-dialog #dialog-view{width:auto}.sets-ui #dialog .platform-container{font-size:.6em;margin-bottom:.5em}.sets-ui .paid-channel-dialog{margin:1em}.sets-ui #dialog .connection-instructions .icon-settings-pair{display:none}.sets-ui .closed-captions-dialog{text-align:left;padding-left:1em}.sets-ui .delete-video-error,.sets-ui .paid-scope-dialog,.sets-ui .video-edit-error,.sets-ui .video-processing,.sets-ui .video-upload-error{margin:3em;font-size:1.6em}.limited-animation .auto-play-tile.focused .video-tile{background-color:#f1f1f1}.limited-animation.sets-ui .title-card{background:-o-linear-gradient(top,rgba(0,0,0,0.9),rgba(0,0,0,0.8),transparent);background:-webkit-linear-gradient(top,rgba(0,0,0,0.9),rgba(0,0,0,0.8),transparent);background:linear-gradient(to bottom,rgba(0,0,0,0.9),rgba(0,0,0,0.8),transparent)}.limited-animation.sets-ui #search #text-box-background,.limited-animation.sets-ui #search #search-text-entry{background-color:rgba(0,0,0,0)}.sets-ui .scrolling-text{text-align:left;padding-left:1em;height:20em}.sets-ui #dialog .scrollbar{right:11em}.sets-ui #dialog-view .reset-help{width:20em}.sets-ui #dialog.remote-reset-dialog .buttons{position:inherit}.sets-ui #dialog.remote-reset-dialog .reset-help{height:11em;padding-left:1em;text-align:left}.sets-ui #dialog.remote-reset-dialog .connected-list{margin-right:2em}.sets-ui .dialog-focused #legend{bottom:17%;right:16%}.exp-densityFiveTiles .horizontal-list>.content{font-size:59%}.exp-densityFiveTiles .shelf>.title{font-size:1.5em;margin-bottom:.75em;margin-top:0}.exp-densityFiveTiles .channel-bottom .title,.exp-densityFiveTiles .tile-bottom .title{font-size:1.75em}.exp-densityFiveTiles .tile-bottom .details{font-size:1.5em;height:50%;margin:.2em 1em 0 0}.exp-densityFiveTiles .channel-top .video-thumb{border-radius:50%}.limited-animation .exp-densityFiveTiles .browse-content .list{margin-left:-8em;width:155em}.exp-densityFourTiles .horizontal-list>.content{font-size:67%}.exp-densityFourTiles .shelf>.title{font-size:1.5em;margin-bottom:.75em;margin-top:0}.exp-densityFourTiles .channel-bottom .title,.exp-densityFourTiles .tile-bottom .title{font-size:1.75em}.exp-densityFourTiles .tile-bottom .details{font-size:1.5em;height:50%;margin:.2em 1em 0 0}.limited-animation .exp-densityFourTiles .browse-content .list{margin-left:-8.5em;width:155em}.exp-densityFourTiles .channel-top .video-thumb{border-radius:50%}.exp-densityHideMetadata .shelf .horizontal-list .tile-bottom,.exp-densityHideMetadata .shelf .horizontal-list .channel-bottom{display:none}.exp-densityHideMetadata .shelf.selected .horizontal-list .tile-bottom,.exp-densityHideMetadata .shelf.selected .horizontal-list .channel-bottom{display:block}.exp-densityHideMetadata .horizontal-list .video-tile .tile-top .decoration{display:none}.exp-densityHideMetadata #search .tile-top .decoration,.exp-densityHideMetadata #post-play-list .tile-top .decoration,.exp-densityHideMetadata .shelf.selected .horizontal-list .tile-top .decoration{display:block}.exp-densityHideMetadata .shelf:not(.selected) .channel-tile .video-thumb{height:70%;width:70%}.sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .item:hover,.sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .channel-tile:hover{background-color:inherit!important}.limited-animation .exp-densityHideMetadata .browse-content .list .shelf:nth-child(1){margin-bottom:9.5em}.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:not(.focused),.limited-animation.sets-ui .exp-densityHideMetadata .video-tile:not(.focused){background-color:inherit}.roku.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:hover:not(.focused),.roku.limited-animation.sets-ui .exp-densityHideMetadata .video-tile:hover:not(.focused){background-color:inherit} \ No newline at end of file
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png deleted file mode 100644 index 14a8c41..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png deleted file mode 100644 index 79b4fbb..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png deleted file mode 100644 index 1022073..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png deleted file mode 100644 index a1cb606..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png deleted file mode 100644 index 6e017dc..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png deleted file mode 100644 index 2efdf75..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png deleted file mode 100644 index bae7f19..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg deleted file mode 100644 index 4cf9844..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png deleted file mode 100644 index fdd416d..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png deleted file mode 100644 index da20b33..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/circle.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/circle.png deleted file mode 100644 index 9222c60..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/circle.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg deleted file mode 100644 index a55be3c..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png deleted file mode 100644 index 6c86373..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png deleted file mode 100644 index fbafd90..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png deleted file mode 100644 index 1bbade8..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/flag.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/flag.png deleted file mode 100644 index 0f17309..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/flag.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png deleted file mode 100644 index 35a3db2..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png deleted file mode 100644 index 426b4b3..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-fullscreen.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-fullscreen.png deleted file mode 100644 index c708e76..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-fullscreen.png +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<html lang=en> - <meta charset=utf-8> - <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> - <title>Error 404 (Not Found)!!1</title> - <style> - *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} - </style> - <a href=//www.google.com/><span id=logo aria-label=Google></span></a> - <p><b>404.</b> <ins>That’s an error.</ins> - <p>The requested URL <code>/s/tv/html5/f0d770f4/img/icon-fullscreen.png</code> was not found on this server. <ins>That’s all we know.</ins>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png deleted file mode 100644 index 21839e2..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-mute.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-mute.png deleted file mode 100644 index 999078d..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-mute.png +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<html lang=en> - <meta charset=utf-8> - <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> - <title>Error 404 (Not Found)!!1</title> - <style> - *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} - </style> - <a href=//www.google.com/><span id=logo aria-label=Google></span></a> - <p><b>404.</b> <ins>That’s an error.</ins> - <p>The requested URL <code>/s/tv/html5/f0d770f4/img/icon-mute.png</code> was not found on this server. <ins>That’s all we know.</ins>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png deleted file mode 100644 index 8ac546c..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png deleted file mode 100644 index e6f1240..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png deleted file mode 100644 index b39bd87..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png deleted file mode 100644 index 2a16694..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png deleted file mode 100644 index c7b3d38..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png deleted file mode 100644 index 87b0492..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png deleted file mode 100644 index 42faaa1..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png deleted file mode 100644 index 248782d..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png deleted file mode 100644 index 9f37410..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-unmute.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-unmute.png deleted file mode 100644 index 70da26b..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icon-unmute.png +++ /dev/null
@@ -1,11 +0,0 @@ -<!DOCTYPE html> -<html lang=en> - <meta charset=utf-8> - <meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width"> - <title>Error 404 (Not Found)!!1</title> - <style> - *{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px} - </style> - <a href=//www.google.com/><span id=logo aria-label=Google></span></a> - <p><b>404.</b> <ins>That’s an error.</ins> - <p>The requested URL <code>/s/tv/html5/f0d770f4/img/icon-unmute.png</code> was not found on this server. <ins>That’s all we know.</ins>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf deleted file mode 100644 index 929a78f..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png deleted file mode 100644 index ea9e5b8..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png deleted file mode 100644 index 7727e8c..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png deleted file mode 100644 index f6b0382..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png deleted file mode 100644 index 99979f0..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png deleted file mode 100644 index 1d2930b..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png deleted file mode 100644 index 056ccf9..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png deleted file mode 100644 index 8d846cb..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png deleted file mode 100644 index 0ecee6d..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png deleted file mode 100644 index 7bbb8ba..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png deleted file mode 100644 index 7442d55..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png deleted file mode 100644 index afab54d..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png deleted file mode 100644 index bdd2471..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png deleted file mode 100644 index 495f00f..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png deleted file mode 100644 index 049ef34..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png deleted file mode 100644 index 7abd5c6..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png deleted file mode 100644 index d283c5a..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png deleted file mode 100644 index 8eb2ac0..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png deleted file mode 100644 index b867b7f..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png deleted file mode 100644 index 2de9041..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png deleted file mode 100644 index 1fa0d1a..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png deleted file mode 100644 index e73e0fc..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png deleted file mode 100644 index 8e60577..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf b/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf deleted file mode 100644 index 0e58508..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/youtube-2015-q3-initial-layout.html b/src/cobalt/layout_tests/testdata/benchmarks/youtube-2015-q3-initial-layout.html deleted file mode 100644 index 5d33c44..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/youtube-2015-q3-initial-layout.html +++ /dev/null
@@ -1,1751 +0,0 @@ -<html xmlns:yt="http://youtube.com"><head><meta charset="utf-8"> - - - <title>YouTube TV</title> - - <style>#loader { height: 100%; left: 0px; position: absolute; top: 0px; width: 100%; z-index: 0; background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAmwAAAEsCAYAAAB+Je/UAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAABVsSURBVFjD7dntcavAGYDRWwIlUIJKoARKoASVQAcqgRIogRJUAiVQArETPKN4LFsfC7sL5505kx9JrvXF7sPyb57nfwAApMuHAAAg2AAAEGwAAIINAADBBgCAYAMAEGwAAAg2AADBBgCAYAMAQLABAAg2AAAEGwAAgg0AQLABACDYAAAEGwAAgg0AAMEGACDYAAAQbAAAgg0AAMEGAIBgAwAQbAAACDYAAAQbAIBgAwBAsAEACDYAAAQbAACCDQBAsAEAINgAAAQbAACCDQAAwQYAINgAABBsAAAINgAAwQYAgGADABBsAAAINgAABBsAgGADAECwAQAINgAABBsAAIINAECwAQAg2AAAEGwAAIINAADBBgAg2AB4Qfmh+kX9oX3A5cPwgmne70wvfibtg+o/vrvS7xvBBrCd0w+b8U8beHcnAMbZmP+f8c5vpbvz2/r++zu5LhFswF59bXbNt83w+6ZpTI7z20lhLfQEG0BKipsTsF6AGfNr4PU3J3iF9UOwAaz9yPLy4WoPNuatuS7XkpM4wQYQRLmcDIz2WGNWmXG5xpy8CTaAl0Kts5cas+l0y7VnDRJsAL8qhJox0efixE2wAdxz/jDZK41JYj6vxdq6JNgAbk/VBvujMUlO77RNsAGcnKoZk/yMy7VqzRJswAE19kFjsnpE2li3BBsg1owx6Y9oE2yAWDPGiDYEGyDWjDGiTbAB3FXZ44zZ1Zysa4IN2Jfiw2R/M2ZXMy7XtjVOsAE70dvbjNnl9NY3wQbsQ21PM2bXU1nnBBuQv9F+ZszuH41a6wQbkLHGXmbMIaax3gk2wOmaMcYpG4INcLpmjHHKJtiA47nav4w51AzWPcEG5KWydxlzyCmtf4INyEdn3zLmkHOx/gk2IB+TfcuYQ85k/RNsQB5qe5Yxh57aOijYAI9DjTFpT2cdFGyAx6HGmLTHY1HBlrUhoC2Om9uAr9f373GoMeZYc7IeCrZcXTM7bg51SnL13R/KJdDvpt258WCPx3xWx5vWeijYcnUOeCGMK7/WU8DXevbduzF5YY5w4n6UqXxWhxxPVwRbtsrAF0OZSVw6Fj+OIuDvRrAJNsGW/1gXBZvHoiufXPWZnASSltpCL0IEmwn43SPYdvFYtF/xdU6BXuPFd34oF8EmQgSbuZnWuijYPBb9X1St8RpPAV9j7Ts/lJAbq89KsAm2/GewLgo2C/V6x81t4kFJukKOdUCwCbb8xz4g2LLWJH7cHGpx7HzXh3IKvNALNsEm2PYxpfVRsOWqCHghXBM+JWl814dSCzYRItjMRk+CEGyb6QNeDEXA11Ul+rpIXyvYRIhgMxs9CUKwZflYtE5w0x18x4fTCTYRItiMYBNsHoven0uCm8jZd3w4oTdVn5dgE2z7GDfwgs1j0WXGBCOy9P0ezlWwiRDBZgSbYPNYdP1AqhMLSPISegSbYBNs+5jJ+ijY9mAKdEE0AV7LJcFHtAg2wSbYBFv+Y40UbNnrAl0MfUKPtCrf6+FUFngRItjML1NYJwVb7kI9hnz3yLlw9I1gE2yCzST6G0Cw7eqx6CmBcOx8n248As0QUMjICmWyWQs2vwEE2zEfi7ZvvIZLoNdQ+z4PqU18swj1Po1gM6/N2Top2JxO/P+JxKuvYQz0Ggrfp2ATbEawmYAHCgi2pIQKplf+dhnob/e+R6fEgs0INiPYBNuexXwk2TjyZucbqmATbCbuDNZJwbYXp0AXxSXi6UjpexRsgs0INiPYBJvHon/PNaO/y35Mgs0INiPYBJvHouuddJURT/bYj9RHsAk2s5/rEMG2m8eizRN/swn0N0++P8Em2IxgM4JNsHks+vh0T/y9PsDfm3xvh1YeaKMwgs0INsHGf7UbB9S0cSCyP5VgM4LNeBIj2JxWrHdhhHoEW/veBJtgM4LNrPw7QLAl5xrgwjg/8HfOgS7CYsXPolgu8nYx/KBf/rvGgiDYBJtgM4JNsLGVECHVP/B3+o3+zrM+T/4uH8Y3X1ezckx+19wJyme8+sjgEuBvv/q+W8FmEgu26eZGrvqmWa6Xawaf27C81p/ex5fzzc3sJNgEG3k+Fv3r74S4uJsVgifkfL7HbvlM1/7e2ogL2rDB70WwhZnul833Ed2bv693pB5sn/+7+smbwy6h3+m0BNo7n1eIG961prW/CzaPRZ9fJEM9xgoRQqeNHnm0K5+4CTbBtsWm1Ub8HFINtuHNv1FFPp0aA9/8fqnntB4nCzbB5rHonbmsvMleE4mcZxfG0yzYBJtg20OwTctaGeK7LebtH5NOK4XaT08vUnhcKtgEm8eiLwTVEPni+1wc+4iPHdZYJI8abP2c/gi2/QXbdYWbr2LDsOlXPvFPac0VbILNY9EHplhx4znN+dzJ/jSho+2owZbSIxfBdoxgG1aMnWrn4RLzRLy3rws2j0Wfi5IQC9KYeaytEW2CTbAJtvWDrdtg7e0yulF89RFpjBns64LNY9H7060UFl2CC2GszUSwCTbBtk2wdRutvWs9Gk0h1mJGm2ATbB6LPnkSFuKEq450YrjGTIEerwg2wSbY1gu264qPQbe4uWzn9PaXi2ATbKT1WLT8ducYYwM8Jb6hh1hIjhps05z+CLa8g+2ycayFXrP6HR8KCDbBRsDHouebf6+OtPjkcApTz4ItVsQINsGWojGhE/w195itbrpGe7pg81j08cAKcQTePPn6q0w29XEWbIJNsAm2sI9FmwzeZ5vhtYhg2+Vj0Snw8fezd4vDnM/Us2ATbIJNsP1Pc5ATpWLDUzZ7umDzWPSBBbMI8O9cn3ztpzmv6WfBJtgEm2AL83TgnNF7vWR2LSLYdvtYtF1Oj+aNF6DQi0C3vIZqeT9toFPD2ykFm2ATbFkE22n5t9vlP8sV/saWTyP+OgWrllO/5uYmPKWDAcEm2AjwWPS6xM67c3rydY8BT75+W5zqgEf6jWATbIIt2WArls/g3toyBA636Y01K1SUDn/cxIZ6v9eMrkUE264fi44B/v8x7tj6Jxa2acO/J9gEm2DbNtjqB9ex6YWby9DXVhPgbzcPrmmh3u85o2sRwbbrx6LvzuWFxebdmZ489j8H+puC7TGVYBNsGwXbs+/7GjnY3j31Kp+8AX12rbx30yvYBBsBXCJvevWTrzfEI9jzC59TiMewp1mwCTbBlkqwvbr2NZHW3XGOE4pdIr9xwSbYDu8UccN75dQpxIlgMccJ23oWbIJNsKUSbK/+vocIJ3uf00dc64tIn7VgE2yscHo0b7QAvTvDHC9s21mwCTbBlnuwhQiYNsJ3/M5NZzOn/STHPi7YDqOLtOE9uwiUkTe2GIEq2ASbYEsv2KoIn3fM9/vuY9GzYBNshFFH2vCevUsNsZHXc7xj/WEWbIJNsO0h2NoIa24V8Xd2ffNvV5lciwi2LGw9wxwnLKs5XrCNgk2wCTbB9uJv/J2/V0b+vQs2wUZA/cab3TlSvJRvfEaXCAuLYBNsgi29YBvmvIKtSuD3LtgEG4GcN97syjlOvMTa1ASbYBNsgi3nYKtmwSbYSEK54UY3zvkEk2ATbIJNsMUOthiBKNgEGwkbN9roLgcOtkKwCTbBJtgOGGxjBtcigi0bl402umo+brBVs2ATbIJNsB0v2IYMrkUEWzbqDTa5KbNHkoJNsAk2wSbYBJtgIzlrTyfYBJtgE2yCTbAJNsFGuhfV5zSCTbAJNsEm2ASbYBNsxI+S36YQbIJNsAk2wSbYBJtgI/6FfW/6BIJJsAk2wSbYBJtgQ7DtwlpzFmyCTbAJNsEm2ASbYCOMtS6sUrAJNsEm2ATb5sF2Wv6Nd5wEm2AjPe0KF9Q1kdcl2ASbYBNsRwu2PR8ECDbBdmhrbJgXwSbYBJtgE2yCTbAJNsIpVrigTrNgE2yCTbAJNsEm2AQbQV0DXkxTQo9qBZtgE2yCTbAJNgTbbnQBL6ZOsAk2wSbYBJtgE2yCjfDOAS+mWrAJNsEm2ASbYBNsgo3wQm6a1SzYBJtgE2yCTbAJNsGGYBNsgk2wCTbBJtgQbIJNsAk2wSbYBJtgE2yCDcEm2ASbYBNsgk2wCTbBhmATbIJNsAk2wSbYEGyCTbAJNsEm2ASbYBNsgg3BJtgEm2ATbIJNsAk2wYZgE2wRg+3fnMcINsGWS7DlchMk2AQbgk2wCTbBJtgEm2BDsAk2wSbYBJtgE2yCTbAJNgSbYBNsgk2wCTbBJtgEG4JNsAk2wSbYBJtgE2w+BMEm2ASbYBNsgk2wCTbBhmATbIJNsAk2wXaUYLvarwWbYBNsgi3e5z0JNsEm2ATbBp8Ngk2wCTbBFmkzFWyCTbAJNgSbYBNsgk2wCTbBJtgEm2BDsAk2wSbYBJtgE2yCTbAh2ASbYBNsgk2wbRhFa13Tvf1asAk2wSbY4n3evWATbIJNsG3w20ewCTbBJtgif9aCTbAJNsGGYBNsgk2wCTbBJtgEm2ATbAi2PQZbIdgEm2ATbIJNsAk2BFvawZbDqV4KwXYWbIJNsAm2DfcXBJtgE2yCLfLvT7AJttyDbdpBsF0Fm2BDsD0zpzf+fifYBJtgE2yRTrxyD7a1RrAJNsGW4AVVRX4t7wbMKNgEm2DbRbBdMgu2046DrbRfCzbBts9gayIe6Q+zYHtUIdgEW8LB1kZYy6qIv7M+4WCzXws2wZZgsJUBXssl4oLTZRRsVQKLqWBLP9gu8zGDrY7web/7fq8Rf1+CTbBxsGALcdFfX/y7daRNNUawfZ5uTYJNsD1wLRUHDbYywuf97nd8ifRkYs3rebJXCzbSDbYQj+leWWy7AH+3ntMPtiLAo99QUTMKtmSDbQoQLbkG2xjgPb9yXfcR1/R3v+vTStfgYK8WbKQbbCHC6dnHOKFOnMo5TrDVG3++oaJmmNOePQXb+clYOyXw/t9dV/qIjwdfua5DhOIrN0Ehoqhe6RoUbIKNhIOtCfSantlwLgH+3rThwv5KoBZvbGCCLf9gOz3xOz4FXmtirSvFCzcoU6DHwK/+tssI63qI9btd6RrsZ3u1YCPZYCsDvabrgwtvE3lhCbHQjQ9s1teVFtTYp6mCLdzpy3WFWPuXwLryzDVWB/qbrwZbs/FNbxP5/W7xu0ewCbaVgu3VY/17IVP/cvd9CfgZNHPcO9PuzntsAz3uXSNq2jnt2VuwVXd+C9PKG2MqN4LdHydrdQJrWKgTpfqP1zAFjLVixWtQsAk2Eg+2S+CLflwWwnb5t9e4GywS+B7G5f21Gz5uFGzbBNsQMFzaG02gR4CpB9vt+282+AxirCX31pf2mzrwe21WvAbP9mrBRtrBVs55TZ/I95Bb1NSCbfNgiyGlYNvCu+tXbpFyXfEarGZ7tWAj6WD7t+EJUez3f+Rgq3b83gTbcYPt3RuR8aD7iGATbGQabLmEzPXN91kcONhOgu3hmQRbNtoA33eTyXtd+8a6mO3Vgo3kgy2XU7YqkQ0916gRbNu/nmd0gi3KujVlECtNRtcggk2wrbywlsvCler0gd7nNcJr7wJtLIJtu/e4dcBcIn/H777fNsK6WgS+RlPdP4oN1uacT5UFG4cLtq3u4l6ZMeAdcLfxax8CngTkGKu5Bts50ulJrsE2RIiec+DfYKqPRocN1ykEm2DL6M6/S2wj/7zzOyW8yP8215vQTCHYhjndSS3YtoqPJpFT1CrQb2vLaBtX+B2m9mh4q/VYsAk2Mgy21KIt9F1vueFj0CJwLO0txlMOtinSdZZ7sG0VbWs9DQh9g5jLzWU726cFG1kGWyqb+1qPKNZ+NNitdLr17vtuBVsSv7/il+trD8G2drQVS1iteapfH+RkTbAJNnYQbDGjbVr5fdYrvvbzio8jU37fewy2cYXfXvnHDcNegu2nU+ZQ+h1HTLHh+0v5UbBgQ7C9+Ohh2nDhuC6b2trvq19hcz89uaFtHTUnwRbktPSdR1zTyp9DSsH2dT2HfMS49U3ksNF69LVPjJGuv3K2Tws2sg+2r1OBte/6pl9Op9a6kw31aPTywElCCsH2b053/iX8/s4Brp9ho88htWC7Pa0q3rxeu4i/z27FqNliff1r7bVPCzZ2Emy372ONk6l3F/N3NoF3QuqZu+9Ugm2Y05yUg21efvfPbtinFyJjr8H2da03L1zrMU+efgq3OuDTixSux94eLdj4/zuoNpAykfdzfmOxGQMvfCEWzkdP26blRK184W+8+92HeK/tbEJs2MUvcdEGPL3d40w3n2P5y+d4TijUfnoP/fJdVw+sB+XNb6NP7L2EWlsQbGRygngbJN0Sc8O34HhkYYsdol/v47K8/q9F+bycmOT+XdV6IfgJ8eBj8DnezHV5L7lEe8ynNoIN4JfHwMYY8zXWRcEGJMrjOmPMvJwEWhMFG5Coi33KGPMxZ+uhYAPSVdmnjDEfc7IeCjYgbZO9yphDz2gdFGxA+jr7lTGHnot1ULAB6avtV8YcejwOFWxAJjwWNeaYM1r/BBvgsagxJu3xOFSwARk52beMOeSU1j/BBuRlsHcZc6gZrHuCDchPY/8y5lBTWfcEG5Cn0R5mzCFmtN4JNsApmzEm7Wmsd4INcMpmjEl3BuucYAPyV9nPjNn1VNY5wQbsQ29PM2aXc7G+CTZgPwqPRo3Z3VyXa9saJ9iAHTnZ34zZzUzLNW1tE2zADjX2OWN2MbX1TLABos0Yk+401jHBBog2Y4xYQ7ABiag+TPY/Y7KYz2v1ZN0SbMAxlR+u9kJjkp7rcq1aswQbcHCtPdGYJOfyobBGCTaA29O2wf5oTBIzfqisS4IN4J5KuBkTbablxNupmmADeDjcOvunMUINwQak73MDaT709lRjgs91ub6EmmADCBpv9YeLx6bGvDyfNz/nD6U1RbABbOW0RFy7PEL9DLnRnmzMf0/PhuUGp1muFWuGYANI8kSuWk4T2puTuS+TPd1kMtO3326//Ka/NMtvvXLdCzaAvStvNr0vzbeN8Uv/bQMVguZrxju/i/7Ob6n+4XdXuB4RbADpheFPznc2+HuGF007iqLf9E98ln99N4IKwQYAgGADABBsAAAINgAAwQYAgGADAECwAQAINgAABBsAAIINAECwAQAg2AAABBsAAIINAADBBgAg2AAAEGwAAIINAADBBgCAYAMAEGwAAAg2AAAEGwCAYAMAQLABAAg2AAAEGwAAgg0AQLABACDYAAAEmw8BAECwAQAg2AAABBsAAIINAADBBgAg2AAAEGwAAIINAADBBgCAYAMAEGwAAAg2AAB8CAAAgg0AAMEGACDYAAAQbAAACDYAAMEGAIBgAwAQbAAACDYAAAQbAIBgAwBAsAEA8OE/SZR9m3dtGpgAAAAASUVORK5CYII=); background-color: rgb(230, 45, 39); background-size: 60%; background-position: 50% 50%; background-repeat: no-repeat; }</style><style>.icon-cast_off::before { content: ""; } -.icon-cast_on::before { content: ""; } -.icon-mr_meh_android::before { content: ""; } -.icon-settings-signin-android::before { content: ""; } -.icon-settings-signout-android::before { content: ""; } -.icon-rockandroll-back::before { content: ""; } -.icon-hats-happy::before { content: ""; } -.icon-hats-neutral::before { content: ""; } -.icon-hats-sad::before { content: ""; } -.icon-hats-very-happy::before { content: ""; } -.icon-hats-very-sad::before { content: ""; } -.icon-search-keyboard::before { content: ""; } -.icon-multiaudio::before { content: ""; } -.icon-settings-check::before { content: ""; } -.icon-settings-uncheck::before { content: ""; } -.icon-popular::before { content: ""; } -.icon-airplane::before { content: ""; } -.icon-back::before { content: ""; } -.icon-check::before { content: ""; } -.icon-chevron-single::before { content: ""; } -.icon-delete::before { content: ""; } -.icon-desktop-arrowkeys::before { content: ""; } -.icon-desktop-delete::before { content: ""; } -.icon-desktop-esc::before { content: ""; } -.icon-desktop-g::before { content: ""; } -.icon-desktop-s::before { content: ""; } -.icon-dislike::before { content: ""; } -.icon-double-chevron-right::before { content: ""; } -.icon-edit::before { content: ""; } -.icon-education::before { content: ""; } -.icon-ellipsis::before { content: ""; } -.icon-entertainment::before { content: ""; } -.icon-exit::before { content: ""; } -.icon-film::before { content: ""; } -.icon-flag::before { content: ""; } -.icon-gaming::before { content: ""; } -.icon-guide-history::before { content: ""; } -.icon-guide-my-subs::before { content: ""; } -.icon-guide-purchases::before { content: ""; } -.icon-guide-social::before { content: ""; } -.icon-guide-what-to-watch::before { content: ""; } -.icon-home::before { content: ""; } -.icon-hourglass::before { content: ""; } -.icon-key-delete::before { content: ""; } -.icon-key-globe::before { content: ""; } -.icon-key-space-sm::before { content: ""; } -.icon-key-space::before { content: ""; } -.icon-like::before { content: ""; } -.icon-lips::before { content: ""; } -.icon-logo-lozenge::before { content: ""; } -.icon-lol::before { content: ""; } -.icon-lozenge::before { content: ""; } -.icon-mix::before { content: ""; } -.icon-music::before { content: ""; } -.icon-news::before { content: ""; } -.icon-people::before { content: ""; } -.icon-pets::before { content: ""; } -.icon-player-3d::before { content: ""; } -.icon-player-annotations::before { content: ""; } -.icon-player-closedcaptions::before { content: ""; } -.icon-player-ff::before { content: ""; } -.icon-player-HD-circle::before { content: ""; } -.icon-player-HD::before { content: ""; } -.icon-player-info::before { content: ""; } -.icon-player-instantreplay::before { content: ""; } -.icon-player-less::before { content: ""; } -.icon-player-more::before { content: ""; } -.icon-player-mute::before { content: ""; } -.icon-player-next::before { content: ""; } -.icon-player-pause::before { content: ""; } -.icon-player-play::before { content: ""; } -.icon-player-prev::before { content: ""; } -.icon-player-replay::before { content: ""; } -.icon-player-rew::before { content: ""; } -.icon-player-settings::before { content: ""; } -.icon-player-share::before { content: ""; } -.icon-player-size-fullscreen::before { content: ""; } -.icon-player-size-medium::before { content: ""; } -.icon-player-size-minimize::before { content: ""; } -.icon-player-stop::before { content: ""; } -.icon-player-subtitles::before { content: ""; } -.icon-player-volume-45::before { content: ""; } -.icon-player-volume-48::before { content: ""; } -.icon-playlist::before { content: ""; } -.icon-playstation-circle::before { content: ""; } -.icon-playstation-square::before { content: ""; } -.icon-playstation-triangle::before { content: ""; } -.icon-playstation-x::before { content: ""; } -.icon-privacy-link::before { content: ""; } -.icon-privacy-locked::before { content: ""; } -.icon-privacy-public::before { content: ""; } -.icon-related::before { content: ""; } -.icon-remoteque::before { content: ""; } -.icon-reward::before { content: ""; } -.icon-rocket::before { content: ""; } -.icon-search-clear::before { content: ""; } -.icon-search::before { content: ""; } -.icon-settings-clear-cookies::before { content: ""; } -.icon-settings-clear-history::before { content: ""; } -.icon-settings-feedback::before { content: ""; } -.icon-settings-help::before { content: ""; } -.icon-settings-pair::before { content: ""; } -.icon-settings-phone::before { content: ""; } -.icon-settings-term::before { content: ""; } -.icon-speechbubble::before { content: ""; } -.icon-sports::before { content: ""; } -.icon-star::before { content: ""; } -.icon-trash::before { content: ""; } -.icon-trends::before { content: ""; } -.icon-tv-dpad::before { content: ""; } -.icon-upload-arrow::before { content: ""; } -.icon-upload::before { content: ""; } -.icon-watch-later::before { content: ""; } -.icon-wii-1::before { content: ""; } -.icon-wii-2::before { content: ""; } -.icon-wii-A::before { content: ""; } -.icon-wii-B::before { content: ""; } -.icon-wii-minus::before { content: ""; } -.icon-wii-plus::before { content: ""; } -.icon-wii-x::before { content: ""; } -.icon-wii-y::before { content: ""; } -.icon-youtube-logo::before { content: ""; } -.icon-youtube-unlimited-logo::before { content: ""; } -@font-face { font-family: 'Cutive Mono'; src: url(www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff) format(woff); } -@font-face { font-family: 'PT Mono'; src: url(www.youtube.com/s/tv/fonts/PTM55FT.woff) format(woff); } -@font-face { font-family: 'PT Serif Caption'; src: url(www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff) format(woff); } -@font-face { font-family: 'PT Sans Caption'; src: url(www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff) format(woff); } -@font-face { font-family: Handlee; src: url(www.youtube.com/s/tv/fonts/Handlee-Regular.woff) format(woff); } -@font-face { font-family: 'Dancing Script'; src: url(www.youtube.com/s/tv/fonts/DancingScript-Regular.woff) format(woff); } -@font-face { font-family: 'Marcellus SC'; src: url(www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff) format(woff); } -body, html { font-size: 100%; height: 100%; margin: auto; overflow: hidden; padding: 0px; -webkit-user-select: none; } -input { font-style: inherit; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: inherit; line-height: inherit; font-family: inherit; margin: 0px; padding: 0px; } -body { background-color: rgb(28, 26, 26); } -p, ul, li { border: 0px; margin: 0px; outline: none; padding: 0px; } -ul { list-style: none; } -.focused, :focus { outline: solid 0px; } -.hidden { display: none !important; } -.invisible { visibility: hidden; } -ul.list li { display: inline; } -ul.list.vertical li { display: block; } -.device-plugin { height: 0px; margin: 0px; position: absolute; visibility: hidden; width: 0px; } -#loader { } -#leanback { height: 100%; } -#app-markup { height: 100%; background-size: 100% 100%; } -#background { bottom: 0px; left: 0px; position: absolute; overflow: hidden; right: 0px; top: 0px; background-size: 100% 100%; } -.limited-memory.sets-ui #app-markup { background-color: rgb(40, 51, 55); } -#app-markup.watch-state { background-color: rgb(0, 0, 0) !important; } -.veryvibrant #app-markup.watch-state { background-image: none !important; } -#playstation-buttons { display: none; position: absolute; } -#spinner { position: absolute; top: 17.17em; width: 100%; } -.browse-state .loading-indicator { display: none; } -.browse-state .fallback-loading-indicator { display: block; } -.opera #spinner { top: 20em; } -.loading-indicator { height: 5.33em; margin: 0px auto; position: relative; width: 5.33em; } -.dot { border-radius: 50%; height: 1.17em; position: absolute; width: 1.17em; background-color: rgb(203, 203, 203); } -@-webkit-keyframes fade1 { - 0%,100% { opacity: 0; } - 50% { opacity: 1; } -} -@-webkit-keyframes fade2 { - 0%,100% { opacity: 0.25; } - 37.5% { opacity: 1; } - 87.5% { opacity: 0; } -} -@-webkit-keyframes fade3 { - 0%,100% { opacity: 0.5; } - 25% { opacity: 1; } - 75% { opacity: 0; } -} -@-webkit-keyframes fade4 { - 0%,100% { opacity: 0.75; } - 12.5% { opacity: 1; } - 62.5% { opacity: 0; } -} -@-webkit-keyframes fade5 { - 0%,100% { opacity: 1; } - 50% { opacity: 0; } -} -@-webkit-keyframes fade6 { - 0%,100% { opacity: 0.75; } - 37.5% { opacity: 0; } - 87.5% { opacity: 1; } -} -@-webkit-keyframes fade7 { - 0%,100% { opacity: 0.5; } - 25% { opacity: 0; } - 75% { opacity: 1; } -} -@-webkit-keyframes fade8 { - 0%,100% { opacity: 0.25; } - 12.5% { opacity: 0; } - 62.5% { opacity: 1; } -} -@keyframes fade1 { - 0%,100% { opacity: 0; } - 50% { opacity: 1; } -} -@keyframes fade2 { - 0%,100% { opacity: 0.25; } - 37.5% { opacity: 1; } - 87.5% { opacity: 0; } -} -@keyframes fade3 { - 0%,100% { opacity: 0.5; } - 25% { opacity: 1; } - 75% { opacity: 0; } -} -@keyframes fade4 { - 0%,100% { opacity: 0.75; } - 12.5% { opacity: 1; } - 62.5% { opacity: 0; } -} -@keyframes fade5 { - 0%,100% { opacity: 1; } - 50% { opacity: 0; } -} -@keyframes fade6 { - 0%,100% { opacity: 0.75; } - 37.5% { opacity: 0; } - 87.5% { opacity: 1; } -} -@keyframes fade7 { - 0%,100% { opacity: 0.5; } - 25% { opacity: 0; } - 75% { opacity: 1; } -} -@keyframes fade8 { - 0%,100% { opacity: 0.25; } - 12.5% { opacity: 0; } - 62.5% { opacity: 1; } -} -#dot1 { animation: fade8 0.72s ease infinite; left: 0px; top: 2.09em; } -#dot2 { animation: fade7 0.72s ease infinite; left: 0.61em; top: 0.61em; } -#dot3 { animation: fade6 0.72s ease infinite; left: 2.09em; top: 0px; } -#dot4 { animation: fade5 0.72s ease infinite; right: 0.61em; top: 0.61em; } -#dot5 { animation: fade4 0.72s ease infinite; right: 0px; top: 2.09em; } -#dot6 { animation: fade3 0.72s ease infinite; bottom: 0.61em; right: 0.61em; } -#dot7 { animation: fade2 0.72s ease infinite; bottom: 0px; left: 2.09em; } -#dot8 { animation: fade1 0.72s ease infinite; bottom: 0.61em; left: 0.61em; } -.spinner.transitions .dot { animation: initial !important; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/circle.png) 50% 50% / 100% no-repeat; } -.spinner.transitions.spin .loading-indicator { transition: transform 25s linear; transform: rotate(-7200deg); } -.transitions #dot1 { opacity: 1; } -.transitions #dot2 { opacity: 0.875; } -.transitions #dot3 { opacity: 0.75; } -.transitions #dot4 { opacity: 0.625; } -.transitions #dot5 { opacity: 0.5; } -.transitions #dot6 { opacity: 0.375; } -.transitions #dot7 { opacity: 0.25; } -.transitions #dot8 { opacity: 0.125; } -.fallback-loading-indicator { color: rgb(241, 241, 241); display: none; font-size: 1.8em; margin: 2px auto 0px; text-align: center; } -.scrollbar { height: 100%; position: absolute; top: 0px; width: 0.1em; background-color: rgba(255, 255, 255, 0.0980392); } -.scrollbar .handle { position: absolute; width: 0.1em; background-color: rgb(241, 241, 241); } -.application-message { color: rgb(241, 241, 241); font-size: 1.8em; position: absolute; text-align: center; text-shadow: rgb(0, 0, 0) 0.04em 0.04em; top: 50%; width: 100%; } -.debug-watermark { color: rgb(14, 2, 2); display: none; font-size: 100%; left: 0px; padding: 1em; position: absolute; bottom: 0px; width: 70%; background-color: rgba(235, 49, 3, 0.701961); } -.debug-watermark.visible { display: block; } -.debug-console { color: rgb(255, 255, 255); height: 95%; overflow: scroll; padding: 1em; position: absolute; right: 0px; top: 0px; width: 40em; z-index: 1; background: rgba(0, 0, 0, 0.901961); } -#player-controls .button, #player-controls .toggle-button { font-family: youtube-icons; speak: none; } -.fps { position: absolute; right: 0px; bottom: 0px; text-align: center; padding-top: 0.3em; width: 5em; height: 1.7em; z-index: 100; background-color: rgb(0, 255, 0); } -#html5-player-messages { display: none; } -#button-list > .icon-player-more::before { content: ""; } -.icon-player-play.toggle-selected::before { content: ""; } -#loader { z-index: 1000; } -.sliding-highlighter, .pivot-sliding-highlighter { box-shadow: rgba(153, 153, 153, 0.298039) 0px 0px 60px; display: none; height: 26em; position: absolute; width: 24em; background: white; } -#settings-items .sliding-highlighter { height: 26.2em; width: 24.2em; } -.horizontal-list.focused .sliding-highlighter, .video-uploads.focused .sliding-highlighter, #settings-items.focused .sliding-highlighter { display: block; } -.video-uploads .sliding-highlighter { height: 20em; width: 18em; } -.carousel .item:hover { cursor: pointer; background-color: rgb(90, 90, 90); } -.feed-title.preview { color: rgb(241, 241, 241); font-size: 1.3em; height: 1.3em; opacity: 0.7; padding-bottom: 0.6em; padding-left: 1.9em; } -.feed-title .unread-count { font-size: 0.6em; margin-left: 0.5em; padding: 0.05em 0.3em; position: relative; top: -0.265em; background-color: rgba(187, 0, 0, 0.901961); } -.prev-feed { height: 3.6em; left: 4%; position: absolute; top: 5%; } -.next-feed { height: 2em; left: 4%; position: absolute; top: 84%; } -.tile { color: rgb(102, 102, 102); height: 26em; list-style: none; overflow: hidden; position: absolute; width: 24em; background-color: rgb(0, 0, 0); } -.tile-focus-target { height: 0px; width: 0px; } -.tile-top { height: 50%; width: 100%; background-color: rgb(0, 0, 0); } -.channel-top { height: 62%; margin: 5.25% 16%; width: 68%; } -.channel-top .video-thumb, .tile-top .video-thumb { height: 100%; background-color: rgb(37, 37, 37); background-size: 100%; background-position: 50% 50%; background-repeat: no-repeat; } -.browse-header-avatar.preloaded, .tile-top .video-thumb.preloaded { background: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png) 50% 50% / auto no-repeat rgb(37, 37, 37); } -.auto-play-tile { overflow: visible; } -.post-play-title { font-size: 1.4em; overflow: hidden; position: absolute; text-overflow: ellipsis; text-shadow: rgb(0, 0, 0) 0.08em 0.08em; top: -1.8em; width: 15.5em; } -.auto-play-tile .video-tile { top: 0px; } -.auto-play-tile .default-title, .auto-play-tile .next-up-title { color: rgb(204, 204, 204); } -.post-play-countdown { display: none; } -.countdown-active .post-play-countdown { color: rgb(255, 255, 255); display: block; font-size: 5em; position: relative; text-align: center; text-shadow: rgb(0, 0, 0) 0.06em 0.06em; top: 14%; } -.playlist-tile.focused, .playlist-tile.focused:hover, .auto-play-tile.focused .video-tile, .auto-play-tile.focused:hover .video-tile, .recent-search-tile.focused, .recent-search-tile.focused:hover, .video-tile.focused, .video-tile.focused:hover { background-color: rgb(241, 241, 241); } -.item .overlay { display: none; } -.playlist-tile .overlay, .video-tile .overlay { display: block; height: 53%; margin-left: 56%; margin-top: -57.5%; opacity: 0.8; width: 45%; background: rgb(0, 0, 0); } -.playlist-tile.focused .overlay, .video-tile.focused .overlay { color: rgb(241, 241, 241); } -.playlist-tile .overlay strong { font-size: 1.75em; font-weight: normal; } -.playlist-tile .overlay .count, .video-tile .overlay .count { font-size: 1.5em; line-height: 1.2em; padding-top: 1.7em; text-align: center; } -.playlist-tile .overlay .icon, .video-tile .overlay .icon { font-family: youtube-icons; font-size: 3em; height: 50%; overflow: hidden; padding: 0.2em; text-align: center; } -.tile-bottom { height: 50%; padding: 0.25em 0px 0px 1em; width: 23em; } -.channel-bottom { height: 25%; margin-top: 2.65em; width: 100%; } -.channel-bottom .title, .tile-bottom .title { color: rgb(153, 153, 153); font-size: 1.7em; height: 2.45em; line-height: 1.25em; margin: 0.6em 0.6em 0px 0px; overflow: hidden; text-align: left; white-space: normal; } -.channel-bottom .title { height: 1.2em; margin: 0px; padding: 0px 0.6em; text-align: center; text-overflow: ellipsis; white-space: nowrap; } -.tile.selected.focused .tile-bottom { color: rgb(34, 34, 34); } -.tile.selected.focused .channel-bottom .details, .tile.selected.focused .tile-bottom .details { color: rgb(153, 153, 153); } -.tile.selected.focused .channel-bottom .title, .tile.selected.focused .tile-bottom .title { color: rgb(68, 68, 68); } -.channel-tile .channel-top .decoration { margin-top: -19%; text-align: right; width: 97%; } -.video-tile .tile-top .decoration { margin-top: -2em; text-align: right; width: 97.3%; } -.channel-top .badge, .tile-top .badge, .tile-top .duration { border-radius: 0.1em; color: rgb(255, 255, 255); display: inline-block; font-size: 1.4em; padding: 0em 0.1em; background: rgba(0, 0, 0, 0.701961); } -.tile-top .badge, .tile-top .duration { text-transform: uppercase; } -.tile-top .live-badge { border: 0px; color: rgb(255, 255, 255); background-color: rgba(230, 33, 23, 0.8); } -.playlist-tile:hover, .video-tile:hover { background-color: rgb(34, 34, 34); } -.channel-tile .details, .playlist-tile .details, .recent-search-tile .details, .video-tile .details { color: rgb(153, 153, 153); font-size: 1.3em; font-weight: 300; height: 40%; overflow: hidden; padding: 0px; white-space: normal; word-break: break-all; } -.channel-tile .details { text-align: center; } -.playlist-tile .details, .recent-search-tile .details, .video-tile .details { margin: 0.7em 0em 0em; } -.custom-playlist-image-tile .tile-top .video-thumb { background-size: 56.25%; background-position-x: 0%; background-repeat: no-repeat; } -.playlist-tile.focused .details, .recent-search-tile.focused .details, .video-tile.focused .details { color: rgb(102, 102, 102); } -.playlist-tile .details .by, .recent-search-tile .results, .video-tile .details .by { height: 1.4em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.playlist-tile .details .views, .video-tile .details .views { display: inline-block; padding-right: 1.5em; } -.playlist-tile .details .views:empty, .video-tile .details .views:empty { display: none; } -.action-tile { border: 2px solid rgba(255, 255, 255, 0.0980392); color: rgb(255, 255, 255); height: 26em; overflow: visible; } -.action-tile.focused, .channel-tile.focused { color: rgb(34, 34, 34); background-color: rgb(255, 255, 255); } -.action-tile .content { height: 26em; white-space: normal; } -.video-tile .live-start-time { display: inline-block; vertical-align: middle; } -.tile-top .count-overlay { font-size: 1.4em; height: 100%; position: absolute; right: 0px; text-align: center; top: 0px; width: 30%; background: rgba(0, 0, 0, 0.74902); } -.tile-top .count-overlay .video-count { display: block; font-size: 2.2em; font-weight: bold; line-height: 0.8em; margin-top: 1.6em; } -.action-tile .title { font-size: 2.4em; height: 24%; overflow: hidden; padding-top: 0.5em; text-align: center; text-overflow: ellipsis; text-transform: uppercase; white-space: normal; } -.action-tile .long-title { font-size: 2em; text-align: center; white-space: normal; } -.action-tile .description, .action-tile .remote-pair-text, .action-tile .remote-reset-help { color: rgb(255, 255, 255); font-size: 1.4em; opacity: 0; padding: 0.5em; text-align: center; white-space: normal; } -.action-tile.focused .description, .action-tile.focused .remote-pair-text, .action-tile.focused .remote-reset-help, .action-tile.focused .sign-out-username { opacity: 1; } -.action-tile .sign-out-username { font-size: 1.7em; margin: 1em auto; overflow: hidden; text-align: center; text-overflow: ellipsis; white-space: nowrap; width: 80%; } -.action-tile .remote-count { font-size: 0.4em; position: absolute; top: 40%; width: 100%; } -.action-tile .remote-standing { display: inline-block; font-size: 1.4em; margin: 0.2em auto; padding: 0.8em 0.4em 0.1em; } -.action-tile .remote-reset-help { height: 2.7em; } -.action-tile .status { font-size: 2em; text-align: center; } -.row-playing { display: none; } -.action-tile .large-action-icon { font-family: youtube-icons; font-size: 11em; margin-top: 0px; text-align: center; width: 100%; } -.action-tile .sign-out-user-icon { border-radius: 20em; height: 9em; margin: 0px auto; width: 9em; background-size: cover; } -.action-tile .search-tile .description { font-size: 1.4em; margin-top: 2em; position: inherit; text-align: center; } -.large-action-icon.icon-guide-history { font-size: 8em; margin-top: 0.2em; } -.toggle-tile .icon { margin-top: 0px; } -.toggle-tile .content .title { height: 12%; white-space: nowrap; } -.toggle-tile .label { font-size: 1.8em; max-height: 13%; text-align: center; width: 100%; } -.selected .icon-search, .tile.selected .icon-search-clear { color: rgb(34, 34, 34); } -.exp-densityBrowse .horizontal-list > .content { font-size: 100%; } -.exp-densityBrowse .horizontal-list .no-content-message { display: none; } -.exp-densityBrowse .horizontal-list .pivot-sliding-highlighter { border: 0.5em solid rgb(255, 255, 255); box-shadow: rgb(0, 0, 0) 0.083em 0.083em 0.75em 0.167em inset; height: 7.5em; margin-left: -0.4em; margin-top: -0.4em; pointer-events: none; width: 13.8em; background: transparent; } -.exp-densityBrowse .horizontal-list.focused .pivot-sliding-highlighter { display: block; } -.exp-densityBrowse .horizontal-list.focused.channel-selected .pivot-sliding-highlighter { border-radius: 50%; height: 7.5em; transform: translateX(3.2em); width: 7.5em; } -.exp-densityBrowse .browse-sets .action-tile, .exp-densityBrowse .horizontal-list .channel-tile, .exp-densityBrowse .horizontal-list .video-tile { height: 14em; width: 14em; } -.exp-densityBrowse .shelf .horizontal-list .channel-tile, .exp-densityBrowse .shelf .horizontal-list .video-tile, .exp-densityBrowse .shelf .horizontal-list .channel-tile.selected, .exp-densityBrowse .shelf .horizontal-list .video-tile.selected { opacity: 0.5; } -.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile, .exp-densityBrowse .shelf.selected .horizontal-list .video-tile, .exp-densityBrowse .horizontal-list .channel-tile, .exp-densityBrowse .horizontal-list .video-tile { opacity: 0.7; } -.exp-densityBrowse .shelf.selected .horizontal-list .channel-tile.selected, .exp-densityBrowse .shelf.selected .horizontal-list .video-tile.selected, .exp-densityBrowse .horizontal-list .channel-tile.selected, .exp-densityBrowse .horizontal-list .video-tile.selected, .exp-densityBrowse .horizontal-list .auto-play-tile.selected .video-tile, .limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile, .limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile, .limited-animation .exp-densityBrowse .shelf .horizontal-list .channel-tile.selected, .limited-animation .exp-densityBrowse .shelf .horizontal-list .video-tile.selected, .limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .channel-tile, .limited-animation .exp-densityBrowse .shelf.selected .horizontal-list .video-tile, .limited-animation .exp-densityBrowse .horizontal-list .channel-tile, .limited-animation .exp-densityBrowse .horizontal-list .video-tile { opacity: 1; } -.exp-densityBrowse .horizontal-list .tile-top { height: 7.83em; } -.exp-densityBrowse .channel-top .badge, .exp-densityBrowse .tile-top .badge { font-size: 1em; padding: 0.2em; } -.exp-densityBrowse .horizontal-list .tile-bottom, .exp-densityBrowse .horizontal-list .channel-bottom { height: 4.25em; margin-top: 0.83em; padding: 0px; width: 100%; } -.exp-densityBrowse .shelf .horizontal-list .tile-bottom, .exp-densityBrowse .shelf .horizontal-list .channel-bottom { display: none; } -.exp-densityBrowse .shelf.selected .horizontal-list .tile-bottom, .exp-densityBrowse .shelf.selected .horizontal-list .channel-bottom { display: block; } -.exp-densityBrowse .browse-sets .action-tile .description, .exp-densityBrowse .horizontal-list .tile-bottom .title, .exp-densityBrowse .horizontal-list .channel-bottom .title { font-size: 1.16em; height: initial; line-height: 1.25em; margin: 0px; max-height: 2.5em; text-overflow: ellipsis; } -.exp-densityBrowse .horizontal-list .channel-bottom .title { white-space: normal; } -.exp-densityBrowse .horizontal-list .video-tile .details { color: rgb(205, 205, 205); font-size: 0.83em; height: initial; margin: 0.4em 0px; } -.exp-densityBrowse .horizontal-list .video-tile .tile-top .decoration { display: none; line-height: 1em; margin-top: 0px; transform: translateY(-100%); width: 100%; } -.exp-densityBrowse #search .tile-top .decoration, .exp-densityBrowse #post-play-list .tile-top .decoration, .exp-densityBrowse .shelf.selected .horizontal-list .tile-top .decoration { display: block; } -.exp-densityBrowse .horizontal-list .video-tile .tile-top .badge { border-radius: 0px; } -.exp-densityBrowse .horizontal-list .video-tile .tile-top .duration { font-size: 1em; font-weight: bold; padding: 0.5em; background: rgba(0, 0, 0, 0.498039); } -.exp-densityBrowse .horizontal-list .channel-bottom .details { display: none; } -.exp-densityBrowse .horizontal-list .video-tile .details .views, .exp-densityBrowse .horizontal-list .video-tile .details .age { display: inline-block; } -.exp-densityBrowse .horizontal-list .video-tile .details .views { padding-right: 0.5em; } -.sets-ui .exp-densityBrowse .horizontal-list .channel-tile.selected .channel-bottom > .title, .sets-ui .exp-densityBrowse .horizontal-list .auto-play-tile.selected .tile-bottom > .title, .sets-ui .exp-densityBrowse .horizontal-list .video-tile.selected .tile-bottom > .title { color: rgb(255, 255, 255); } -.exp-densityBrowse .video-tile .overlay { height: 7.83em; margin-left: 60%; margin-top: -7.83em; width: 40%; } -.exp-densityBrowse .video-tile .overlay .count { font-size: 1em; line-height: 1em; padding-top: 1.5em; } -.exp-densityBrowse .video-tile .overlay .icon { font-size: 2em; padding: 0px; } -.exp-densityBrowse .horizontal-list .channel-top { height: 7.83em; margin: 0px auto; width: 7.83em; } -.exp-densityBrowse .horizontal-list .channel-top .video-thumb { border-radius: 50%; } -.exp-densityBrowse .browse-sets .shelf > .title { font-size: 1em; margin-bottom: 0.9em; margin-top: 0px; } -.exp-densityBrowse .browse-sets .shelf > .title .main { font-size: 1.5em; } -.exp-densityBrowse .browse-sets .shelf > .title .annotation { font-size: 1em; } -.exp-densityBrowse .browse-sets .shelf > .title { color: rgb(205, 205, 205); } -.engaged.exp-densityBrowse .channel-tile .voice-command, .engaged.exp-densityBrowse .video-tile .voice-command { font-size: 1em; line-height: 1em; margin-top: -2em; } -.limited-animation.sets-ui .exp-densityBrowse .video-tile:hover:not(.focused), .limited-animation.sets-ui .exp-densityBrowse .channel-tile:hover:not(.focused), .sets-ui .exp-densityBrowse .carousel .item:hover, .sets-ui .exp-densityBrowse .carousel .auto-play-tile:hover, .sets-ui .exp-densityBrowse .carousel .channel-tile:hover { opacity: 1; background-color: inherit !important; } -.exp-densityBrowse .browse-sets .action-tile { border: none; } -.exp-densityBrowse .browse-sets .action-tile .content { height: 7.83em; margin-bottom: 0.83em; } -.exp-densityBrowse .browse-sets .action-tile .title { display: none; } -.exp-densityBrowse .browse-sets .action-tile .large-action-icon { color: rgb(255, 255, 255); font-size: 6em; height: 1.3em; line-height: 1.3em; background-color: rgb(35, 35, 35); } -.exp-densityBrowse .browse-sets .action-tile .description { opacity: inherit; padding: 0px; } -.exp-densityBrowse .auto-play-tile { height: 14em; width: 14em; } -.exp-densityBrowse .post-play-countdown { top: 7%; } -.limited-animation .exp-densityBrowse .browse-content .list { margin-left: -7.5em; width: inherit; } -.limited-animation .exp-densityBrowse .browse-content .shelf > .title { margin-left: 7.5em; } -.limited-animation .exp-densityBrowse .browse-content .list .shelf:nth-child(1) { margin-bottom: 6.5em; } -.limited-animation .exp-densityBrowse .browse-content .list .shelf { margin-bottom: -0.1em; } -.limited-animation.sets-ui .exp-densityBrowse .channel-tile:not(.focused), .limited-animation.sets-ui .exp-densityBrowse .video-tile:not(.focused) { background-color: inherit; } -.limited-animation .exp-densityBrowse .channel-tile.focused, .limited-animation .exp-densityBrowse .video-tile.focused { background-color: inherit; } -.limited-animation .exp-densityBrowse .video-tile { margin-right: 0.5em; } -.limited-animation .exp-densityBrowse .video-tile .overlay { height: 7.03em; margin-left: 8em; margin-top: -7.43em; width: 5.6em; } -.limited-animation .exp-densityBrowse .video-tile .tile-top { height: 7.03em; padding: 0.4em; width: 13.2em; background: inherit; } -.limited-animation .exp-densityBrowse .channel-tile { margin-right: 0.5em; } -.limited-animation .exp-densityBrowse .channel-tile .channel-top { height: 6.83em; padding: 0.4em; width: 6.83em; } -.limited-animation .exp-densityBrowse .video-tile.focused .tile-top { background: rgb(255, 255, 255); } -.limited-animation .exp-densityBrowse .channel-tile.focused .channel-top { border-radius: 50%; background: rgb(255, 255, 255); } -.limited-animation .exp-densityBrowse .search .placeholder-tile, .limited-animation .exp-densityBrowse .browse-content .list .placeholder-tile { height: 14em; margin-right: 0.5em; width: 14em; } -#dialog.remote-reset-dialog > .title { font-size: 3em; padding-bottom: 0.5em; } -#dialog.remote-reset-dialog .buttons { bottom: 0.5em; position: absolute; } -#dialog.remote-reset-dialog { left: 0px; position: absolute; white-space: normal; } -.remote-reset-dialog #dialog-view { color: rgb(170, 170, 170); font-size: 1.8em; padding-top: 0.5em; } -.connection-instructions { padding-top: 0.5em; font-size: 2em; } -.text-dialog .connection-instructions { font-size: 1.3em; } -.browse-sets-state .login-dialog { margin-top: 5em; } -#search .pairing .pairing-content > *, #dialog .pairing .pairing-content > * { display: inline-block; } -#search .pairing .pairing-content .step2, #dialog .pairing .pairing-content .step2 { display: block; } -#search .dial-upsell .connection-steps .no-dial-connect-step1, #search .manual-connect .connection-steps .with-dial-connect-step1 { display: none; } -.connection-instructions .step1, .connection-instructions .step2, .qr-code .scan, .pairing .connected-header, .remote-reset-dialog .connected-header { color: rgb(170, 170, 170); font-size: 0.7em; } -.connection-instructions .pair-url, .connection-instructions .pair-code { color: rgb(241, 241, 241); } -.connection-instructions .step2 { margin-top: 2em; } -.pairing .qr-code, .pairing .connected-list { display: inline-block; margin-left: 1em; vertical-align: top; } -.pairing .dial-upsell { color: rgb(170, 170, 170); display: inline-block; font-size: 95%; overflow: hidden; padding-left: 2em; padding-top: 0.8em; text-align: initial; vertical-align: top; white-space: normal; width: 16em; } -.pairing .cast-icon { display: inline-block; height: 1em; margin: 0.1em 0.3em; vertical-align: middle; width: 1em; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png) 50% 50% / contain no-repeat; } -.pairing .qr-code .scan { margin-bottom: 0.5em; white-space: normal; width: 5em; } -.pairing .qr-code img { height: 5.1em; width: 5.1em; } -.pairing .icon-settings-pair, .login-dialog .icon-settings-pair { display: inline-block; font-style: normal; font-variant: normal; font-weight: normal; font-stretch: normal; font-size: 5em; line-height: normal; font-family: youtube-icons; height: 1em; margin-top: 0.1em; width: 1.4em; background-image: none; } -.remote-reset-dialog .connected-header, .pairing .connected-header { margin-bottom: 0.3em; } -.remote-reset-dialog .devices, .pairing .devices { list-style: none; font-size: 1.5em; color: rgb(241, 241, 241); } -.remote-reset-dialog .devices > div, .pairing .devices > div { display: block; height: 1.5em; line-height: 1.5em; overflow: hidden; padding-left: 1.5em; text-overflow: ellipsis; white-space: nowrap; width: 11.5em; } -.remote-reset-dialog .devices .connected::before { background-position: 0px 100%; } -.remote-reset-dialog .devices .connected { color: rgb(241, 241, 241); } -#search { bottom: 0px; color: rgb(241, 241, 241); left: 0px; overflow: hidden; position: absolute; right: 0px; text-align: center; top: 0px; } -.watch-state #search { left: 0px; } -#search > .controls { left: 8em; margin-right: 18em; position: absolute; right: 2.5em; text-align: left; top: 2.5em; } -#search-text-box { font-size: 1.6em; height: 100%; margin: 0px auto; overflow: hidden; position: relative; background-color: rgb(225, 225, 225); } -#search-text-box > .icon-search { display: none; } -#search-input { border: none; color: rgb(17, 17, 17); height: 100%; padding-left: 0.5em; width: 100%; background: none; } -#search-input:disabled { color: rgb(17, 17, 17); } -#search-query { color: rgb(17, 17, 17); height: 100%; overflow: hidden; padding-left: 0.5em; padding-top: 0.3em; position: absolute; text-overflow: ellipsis; white-space: pre; width: 95%; } -#search-suggestions { font-size: 1.2em; position: relative; display: inline-block; left: 0px; width: 100%; } -.search-state #spinner { top: 26em; } -#suggest-list { overflow: hidden; } -#suggest-list > div { border-radius: 1px; color: rgb(225, 225, 225); display: inline-block; padding: 0.2em 0.5em; } -#search-keyboard { font-size: 1em; text-align: left; width: 65%; } -#search-suggestions, #search-keyboard, #letter-suggest { white-space: nowrap; } -#search-keyboard, #letter-suggest { z-index: 1; } -#keyboard-grid { display: inline-block; font-size: 1.6em; margin: 0px auto; overflow: hidden; text-align: left; } -#keyboard-grid, #keyboard-spacebar { color: rgb(163, 163, 163); } -#keyboard-grid .button { border-radius: 1px; display: inline-block; margin: 0.3em 0.6em 0.3em 0px; padding: 0px 0.1em; text-align: center; text-transform: uppercase; width: 1em; vertical-align: top; } -#keyboard-grid .list { text-align: left; text-shadow: none; } -#search-keyboard #keyboard-grid .icon-key-delete.button { font-family: youtube-icons; font-size: 0.7em; line-height: 1.2em; margin-left: 2.25em; padding: 0.25em; width: 2.25em; } -#keyboard-spacebar { border-radius: 1px; display: inline-block; font-family: youtube-icons; font-size: 1.44em; margin: 0.1em 7em 0px 2.1em; padding: 0.1em; text-align: left; } -#search-keyboard #keyboard-grid .clear-query-tile.button { font-size: 0.7em; margin-left: 2.25em; padding: 0.25em; text-transform: uppercase; width: auto; } -#keyboard-grid .icon-key-globe { font-family: youtube-icons; margin: 0.25em 0px 0.25em 1.6em; padding: 0.1em; width: 1.2em; } -#search-keyboard .button.focused { color: rgb(33, 33, 33); background-color: rgb(225, 225, 225); } -#letter-suggest { font-size: 1.6em; position: fixed; text-align: center; width: 1.2em; } -.letter-suggest-visible #keyboard-grid .list.selected .button.selected:not(.focused) { color: rgb(0, 0, 0); text-shadow: none; background-color: rgba(153, 153, 153, 0.85098); } -#keyboard-grid .button.numbers-toggle-tile { font-size: 0.75em; padding: 0.22em; margin: 0.25em 0px 0px 2.1em; width: auto; } -#search .pairing .icon-settings-pair { display: none; } -#search .search-message { display: inline-block; margin-left: 2em; margin-top: 1.5em; vertical-align: top; white-space: normal; width: 50%; } -#search .search-pairing { bottom: 0px; display: inline-block; left: 5em; padding: 2em 2.5em 4em; position: absolute; text-align: left; text-shadow: black -1px 1px 2px; width: 100%; background-color: rgba(0, 0, 0, 0.298039); } -.limited-animation #search .search-pairing { background-color: rgb(0, 0, 0); } -#search .search-pairing .search-img { display: inline-block; height: 11em; width: 11em; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png); background-size: cover; } -#search .search-pairing .title { font-size: 1.9em; } -#search .search-pairing .connection-instructions { font-size: 1.6em; } -#search .search-pairing .dial-upsell-content { color: rgb(170, 170, 170); } -#search .search-pairing .manual-connect-content .connection-steps { padding: 0px; } -#search .search-pairing .manual-connect-content .connection-steps .pair-code, #search .search-pairing .manual-connect-content .connection-steps .pair-url { display: block; } -#search .search-pairing .manual-connect-content .connection-steps .step2 { margin-top: 1em; } -#search .search-pairing .manual-connect-content .connection-steps .label, #search .search-pairing .manual-connect .dial-upsell-content, #search .search-pairing .dial-upsell .manual-connect-content { display: none; } -#search .pairing .no-dial-connect-step1, #search .pairing .no-dial-connect-step2 { display: inline-block; } -#search .pairing .no-dial-connect-step2 { margin-left: 2em; } -#search .pairing .connection-steps { text-align: left; } -#search .pairing .connected-list, #search .pairing .qr-code-wrapper { display: none; } -#search.hide-input .search-pairing { margin-top: 8em; } -#letter-suggest div { color: rgba(0, 0, 0, 0.8); height: 1.4em; text-shadow: none; background-color: rgba(153, 153, 153, 0.85098); } -#letter-suggest .focused { color: rgb(241, 241, 241); } -#transliteration-container { display: none; } -#search-keyboard.transliterable #transliteration-container { display: block; } -#transliteration .list { font-size: 2em; height: 1.2em; margin: 0px auto; overflow: hidden; padding: 0.2em 0px; text-align: center; width: 77%; } -#transliteration .list > div { display: inline; padding: 0px 0.5em; position: relative; } -#suggest-list > div.focused, #transliteration .list .focused { color: rgb(33, 33, 33); background-color: rgb(254, 254, 254); } -#transliteration .button:hover { background-color: rgba(153, 153, 153, 0.4); } -#transliteration .button:hover, #search-keyboard .button:hover { cursor: pointer; } -#search .horizontal-list > .content { text-align: left; } -.limited-animation.sets-ui #search .horizontal-list > .content { margin-left: -21.8em; width: 126em; } -#search .horizontal-list { left: 7.5em; height: inherit; position: absolute; right: 0px; top: 38%; transform: translateY(7.5em); transition: opacity 0.25s, transform 0.25s; width: initial; } -#search.input-collapsed .horizontal-list { transform: none !important; } -#search-keyboard { transition: opacity 0.25s, transform 0.25s; transform-origin: 50% top 0px; } -#search-keyboard.hidden { opacity: 0; transform: scaleY(0.5); display: block !important; } -#search #search-text-entry { height: 2.4em; } -#search #search-suggestions, #search #search-text-entry { padding-top: 0.25em; transform-origin: 50% top 0px; transition: opacity 0.25s, transform 0.25s; background-color: rgba(0, 0, 0, 0); } -.limited-animation #search .horizontal-list, .limited-animation #search #search-suggestions, .limited-animation #search #search-text-entry, .limited-animation #search #search-keyboard { transition: none; } -#search-text-entry { padding-bottom: 0.4em; } -#search-text-entry, #text-box-background { height: 3em; } -#keyboard-icon { display: none; font-family: youtube-icons; font-size: 1.2em; padding-bottom: 0.4em; text-align: center; vertical-align: bottom; width: 2em; } -.input-collapsed #keyboard-icon { display: inline-block; } -#search-text-entry .suggestions-container { white-space: nowrap; overflow: hidden; height: 2.4em; } -.exp-densityBrowse #search .horizontal-list { font-size: 100%; height: 14em; top: 35%; transform: translateY(8em); } -.limited-animation .exp-densityBrowse #search .horizontal-list .list { margin-left: -14em; } -.exp-densityBrowse #search .horizontal-list .video-tile { height: 14em; } -.exp-densityBrowse #search .horizontal-list .video-tile .details .views, .exp-densityBrowse #search .horizontal-list .video-tile .details .age { display: inline-block; } -.exp-densityBrowse #search .horizontal-list .video-tile .details .views { padding-right: 0.5em; } -.limited-animation.sets-ui .exp-densityBrowse #search .horizontal-list > .content { margin-left: 0px; width: inherit; } -#player { height: 100%; width: 100%; } -.watch-state #watch { display: block; } -.veryvibrant #watch { height: 100%; background-color: rgb(0, 0, 0); } -#player-facade { height: 100%; position: absolute; width: 100%; } -#player-video { height: 100%; } -#watch, .dialog-focused .standard-caption-window, #caption-window-99, .countdowntimer, .ytp-cued-icon, .ytp-fallback, .html5-context-menu, .html5-dialog-holder, .html5-endscreen, .html5-info-bar, .html5-modal-panel, .html5-player-chrome, .html5-show-video-info-template, .html5-storyboard, .html5-text-button, .html5-video-player .hid, .html5-ypc-module, .player-actions-container, .video-ad-status-bar, .video-annotations, .html5-watermark, .video-fallback-content, .video-ads, .title-card.hidden { display: none; } -.html5-video-player { overflow: visible; } -.html5-video-info-panel { color: rgb(241, 241, 241); display: none; margin: 20%; position: absolute; top: 0px; z-index: 1; background-color: rgba(0, 0, 0, 0.701961); } -.html5-video-info-panel-close { display: none; } -.html5-video-info-panel-content > div > div { display: inline-block; font-weight: bold; padding: 0px 0.5em; text-align: right; width: 10em; } -.ad-video { width: 100%; height: 100%; } -.ad-showing .video-ads { display: block; overflow: hidden; } -.ad-interrupting.tag-pool-enabled .html5-main-video { position: absolute; left: -1px; top: -1px; overflow: hidden; width: 1px !important; height: 1px !important; } -.html5-video-player .video-stream { position: absolute; top: 0px; left: 0px; display: block; } -.opera .video-stream { height: 720px; width: 1280px; } -.advertisement-info, .skip-ad-button { position: absolute; top: 9.5em; } -.advertisement-info { left: 12.5%; text-align: left; width: 30%; overflow: hidden; } -.advertisement-info-top { height: 3em; } -.advertisement-avatar { width: 3em; height: 3em; display: inline-block; margin-right: 0.4em; background-size: contain; background-position: 100% 50%; background-repeat: no-repeat; } -.advertisement-info-details { display: inline-block; vertical-align: top; width: 79%; } -.advertisement-title, .advertisement-advertiser, .third-party { color: rgb(255, 255, 255); text-shadow: rgb(0, 0, 0) 2px 1px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } -.third-party { position: absolute; bottom: 0px; } -.advertisement-title { font-size: 1.4em; line-height: 1em; height: 1.1em; } -.advertisement-advertiser { font-size: 1.1em; line-height: 1.3em; height: 1.4em; } -.advertisement-info .ad-badge { padding: 1px 5px; text-shadow: none; border-radius: 0.15em; font-size: 0.9em; text-transform: capitalize; background-color: rgb(230, 188, 39); } -.skip-ad-button { right: 12.5%; border-radius: 0.15em; padding: 0.6em; background-color: rgba(0, 0, 0, 0.4); } -.canskip.mdx-skip.skip-ad-button { height: 4em; width: 18em; } -.canskip.mdx-skip .skip-button-text { font-size: 1.1em; height: 3em; left: 2em; line-height: 1.5em; position: absolute; top: 0.7em; width: 75%; } -#transport-controls.ad-active .player-controls #button-list div.skip-ad-button .label, .skip-ad-button .label { font-size: 1.1em; padding: 0px 1.4em; height: 2.5em; line-height: 2.5em; border-radius: 0.12em; cursor: pointer; color: rgb(225, 225, 225); background-color: rgba(0, 0, 0, 0); } -.skip-ad-button.canskip.mdx-skip .label { height: 3.7em; } -#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip:hover .label, .skip-ad-button.canskip:hover .label { color: rgb(33, 33, 33); border-radius: 0.12em; background-color: rgb(255, 255, 255); } -#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip.focused .label, .skip-ad-button.canskip.focused .label { color: rgb(33, 33, 33); border-radius: 0.12em; background-color: rgb(225, 225, 225); } -.skip-ad-button .skip-symbol { display: none; font-family: youtube-icons; } -.skip-ad-button.canskip .skip-symbol.icon-player-next { display: inline; font-size: 1.3em; margin-left: 0.5em; vertical-align: middle; } -.exp-newMdxSkipButtonCast .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-cast_on { display: inline; font-size: 2.5em; position: absolute; right: 0.7em; text-align: right; top: 0.5em; width: 25%; } -.exp-newMdxSkipButtonPair .canskip.mdx-skip.skip-ad-button .skip-symbol.icon-settings-pair { display: inline; font-size: 4em; position: absolute; right: 0.4em; text-align: right; top: 0.3em; width: 25%; } -.canskip.mdx-skip.skip-ad-button .skip-symbol.icon-player-next { display: none; } -#player-controls { text-align: center; } -#bottom-half { bottom: 0px; height: 50%; position: absolute; width: 100%; } -#transport-controls { bottom: 0px; height: 100%; position: absolute; transition: transform 0.25s, opacity 0.25s; width: 100%; background: linear-gradient(rgba(0, 0, 0, 0), rgb(0, 0, 0)); } -#transport-controls.hidden { opacity: 0; display: block !important; } -.limited-animation #transport-controls.hidden { display: none !important; } -#transport-controls, #transport-controls.focused { display: block; } -.player-controls-widget { border: 0px; margin-top: 8.4em; } -.fresh-transport-controls.seeking-forward .seeking-icon.icon-player-rew::before { content: ""; } -.seeking-icon { bottom: 3em; color: rgb(255, 255, 255); display: none; position: absolute; left: 0px; margin: 0px auto; right: 0px; } -.seeking-icon span { display: none; } -.fresh-watch.watch-seeking .seeking-icon { display: block; } -.fresh-watch .title-card { height: 35.9%; background: linear-gradient(rgba(0, 0, 0, 0.74902), transparent); } -#transport-controls.fresh-transport-controls { background: linear-gradient(to top, rgb(0, 0, 0), transparent); } -.fresh-watch .player-video-title { color: rgb(255, 255, 255); font-size: 1.936em; } -.fresh-watch .player-meta .player-video-details { color: rgba(255, 255, 255, 0.701961); font-size: 1.455em; } -.fresh-watch .pivot-shelf-list { margin-top: 14.5em; padding-left: 3.871em; } -#fresh-rows-container { border: 0px; color: rgb(255, 255, 255); margin-top: 7.7em; } -.fresh-transport-controls .storyboards { position: absolute; } -.fresh-transport-controls .more-row, .fresh-transport-controls .main-row { margin-left: 5%; width: 95%; } -.fresh-transport-controls .button span, .fresh-transport-controls .toggle-button span { display: none; font-family: roboto-regular; color: rgb(255, 255, 255); } -.lang-case-sensitive .fresh-transport-controls span::first-letter { text-transform: uppercase; } -.fresh-transport-controls .button.disabled:hover, .fresh-transport-controls .toggle-button.disabled:hover { background-color: transparent; } -.fresh-transport-controls .button.disabled, .fresh-transport-controls .toggle-button.disabled { opacity: 0.45; } -.fresh-transport-controls .button.focused, .fresh-transport-controls .toggle-button.focused, .fresh-transport-controls .button:hover, .fresh-transport-controls .toggle-button:hover { color: rgb(255, 255, 255); background-color: rgba(255, 255, 255, 0.498039); } -.fresh-transport-controls .button, .fresh-transport-controls .toggle-button, .seeking-icon { border-radius: 4px; font-family: youtube-icons; font-size: 1.4em; height: 1em; padding: 0.55em; speak: none; text-align: center; width: 1em; } -.fresh-transport-controls .button, .fresh-transport-controls .toggle-button { color: rgba(255, 255, 255, 0.701961); cursor: pointer; display: inline-block; position: relative; } -.fresh-transport-controls #transport-more-button::before { display: inline-block; left: 19%; position: absolute; top: -9%; } -.fresh-transport-controls #transport-more-button { font-size: 2em; height: 0.7em; margin-right: 1.452em; padding: 0.385em; width: 0.7em; } -.fresh-transport-controls #transport-more-button span { color: rgb(255, 255, 255); display: inline-block; font-size: 0.485em; left: 4.5em; position: absolute; text-align: left; top: 1em; width: 15em; } -.fresh-transport-controls #transport-more-button.top-row-active span { display: none; } -.fresh-transport-controls #transport-more-options-list { display: inline-block; } -.fresh-transport-controls .progress-bar { display: inline-block; height: 3em; left: 0px; padding: 0px; position: relative; top: 0px; width: 76.55%; } -.fresh-transport-controls.live-playback #play-pause-button { margin-right: 1em; } -.fresh-transport-controls.live-playback .progress-bar { width: 77.55%; } -.fresh-transport-controls.live-playback .live-indicator { display: inline-block; left: 0px; margin-left: 1em; position: relative; top: 0px; } -.fresh-transport-controls #player-time-elapsed, .fresh-transport-controls .player-time-total { color: rgb(255, 255, 255); display: inline-block; font-size: 1.3em; position: relative; text-align: center; top: 0px; width: 8%; } -.fresh-transport-controls .more-row { margin-bottom: 5px; } -.fresh-transport-controls .more-row .button, .fresh-transport-controls .more-row .toggle-button { margin-right: 2.075em; vertical-align: top; } -.fresh-transport-controls .icon-like.toggle-selected, .fresh-transport-controls .icon-dislike.toggle-selected, .fresh-transport-controls .icon-player-closedcaptions.toggle-selected { color: rgb(39, 147, 230); } -.fresh-transport-controls .icon-logo-lozenge.toggle-selected { color: rgb(255, 0, 0); } -.fresh-transport-controls .more-row .button span, .fresh-transport-controls .more-row .toggle-button span { font-size: 0.692em; left: -3.45em; position: relative; top: -4.4em; width: 8.3em; } -.fresh-transport-controls .more-row .button.focused span, .fresh-transport-controls .more-row .toggle-button.focused span, .fresh-transport-controls .more-row .button:hover span, .fresh-transport-controls .more-row .toggle-button:hover span { display: inline-block; } -.fresh-transport-controls .progress-bar .progress-bar-line div { height: 0.242em; } -.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-background { background-color: rgba(255, 255, 255, 0.45098); } -.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-loaded { background-color: rgb(255, 255, 255); } -.fresh-transport-controls .progress-bar .progress-bar-line .progress-bar-played { background-color: rgb(223, 35, 35); } -.fresh-transport-controls .progress-bar.ad-active .progress-bar-played { background-color: rgb(231, 189, 0); } -.ypc-playback .fresh-transport-controls .progress-bar-line .progress-bar-played { background-color: rgb(39, 147, 230); } -.fresh-watch .ad-point-separator, .fresh-transport-controls .progress-bar .progress-bar-disc, .fresh-transport-controls.ad-active #player-time-elapsed, .fresh-transport-controls.ad-active .player-time-total { display: none; } -.fresh-transport-controls.ad-active .progress-bar { padding-left: 1em; width: 88%; } -.fresh-transport-controls.ad-active .more-row, .fresh-watch.watch-seeking .more-row { visibility: hidden; } -.fresh-watch .skip-ad-button, .fresh-watch .advertisement-info { top: 6.7em; } -.fresh-watch .advertisement-info { left: 5%; } -.fresh-watch .advertisement-info .advertisement-info-top { height: 3.065em; position: relative; } -.fresh-watch .skip-ad-button { border-radius: 4px; padding: 0px; right: 6%; z-index: 1; background-color: rgba(0, 0, 0, 0.498039); } -.fresh-watch .skip-ad-button .label { color: rgb(255, 255, 255); font-size: 1.13em; height: 2.57em; line-height: 2.57em; padding: 0px 1.3em; } -.fresh-watch .skip-ad-button .skip-symbol { font-size: 1.1em; } -.fresh-watch .skip-ad-button.canskip:hover, .fresh-watch .skip-ad-button.canskip.focused { background-color: rgba(255, 255, 255, 0.498039); } -.fresh-watch .skip-ad-button.canskip:hover .label, .fresh-watch .skip-ad-button.canskip.focused .label { color: rgb(255, 255, 255); background: none; } -.fresh-watch .advertisement-info { color: rgb(255, 255, 255); } -.fresh-watch .advertisement-info .advertisement-advertiser { font-size: 100%; height: 1.4em; line-height: 1.3em; } -.fresh-watch .advertisement-info .advertisement-advertiser > span { vertical-align: bottom; } -.fresh-watch .advertisement-info .advertisement-advertiser, .fresh-watch .advertisement-info .advertisement-title, .fresh-watch .advertisement-info .third-party { overflow: hidden; text-shadow: none; text-overflow: ellipsis; white-space: nowrap; } -.fresh-watch .advertisement-info .third-party { bottom: 0px; position: absolute; vertical-align: top; width: 79%; } -.fresh-watch .advertisement-info .third-party > span { vertical-align: middle; } -.fresh-watch .advertisement-info .advertisement-title { font-size: 1.35em; font-weight: bold; line-height: 1em; height: 1.1em; padding-bottom: 1%; text-shadow: none; } -.fresh-watch .advertisement-info .ad-badge { border-radius: 0.15em; font-size: 0.85em; font-weight: bold; padding: 1px 7px; text-shadow: none; text-transform: capitalize; background-color: rgb(231, 189, 0); } -.fresh-watch .advertisement-info .remaining-duration, .fresh-watch .advertisement-info .ad-by { font-size: 1.13em; } -.fresh-watch .advertisement-info .remaining-duration { padding: 0px 2%; } -.fresh-watch .advertisement-info .advertisement-avatar { border-radius: 50%; display: inline-block; height: 3.065em; margin-right: 1.4em; width: 3.065em; background-size: contain; background-repeat: no-repeat; } -.title-card { display: block; height: 25%; position: absolute; top: 0px; transition: transform 0.25s, opacity 0.25s; width: 100%; background: linear-gradient(rgba(0, 0, 0, 0.901961), rgba(0, 0, 0, 0.8), transparent); } -.ypc-playback .title-card { height: 30%; } -.title-card.hidden { opacity: 0; display: block !important; } -.limited-animation .title-card.hidden { display: none !important; } -.title-card .badges span { border: 1px solid rgb(221, 221, 221); border-radius: 2px; display: inline-block; font-size: 0.9em; margin-left: 1em; padding: 0px 0.5em; text-transform: uppercase; vertical-align: middle; } -.title-card .badges span.live-badge { color: rgb(255, 255, 255); border: 0px; margin-left: 0px; background-color: rgba(230, 33, 23, 0.8); } -.selected-title .views { margin-top: -0.6em; } -.player-meta { color: rgb(241, 241, 241); margin: 2.6em 0px 0px 3.5em; white-space: nowrap; width: 90%; } -.player-meta .user-details { position: absolute; right: 5%; } -.player-meta .user-details > div { display: inline-block; vertical-align: top; } -.player-meta .user-details .avatar { height: 4em; width: 4em; background-size: cover; } -.player-meta .user-details .message { font-size: 80%; margin: 0.2em 1em 0px 1.1em; max-width: 50%; overflow: hidden; text-overflow: ellipsis; } -.player-meta .player-video-text { display: inline-block; padding-left: 1.5em; width: 90%; } -.player-meta .player-video-details { font-size: 1.5em; white-space: initial; } -.player-meta .player-video-details > div { margin: 0.2em 1em 0px 0px; vertical-align: top; } -.player-meta .player-video-details .username { max-width: 45%; overflow: hidden; text-overflow: ellipsis; } -.player-meta .player-video-details .set-context { max-width: 45%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -.player-meta .player-video-details .set-context, .player-meta .player-video-details .set-context-position, .player-meta .player-video-details .uploaded-date, .player-meta .player-video-details .view-count, .player-meta .player-video-details .badges, .player-meta .player-video-details .username { display: inline-block; } -.player-video-avatar { border-radius: 50%; display: inline-block; height: 5.5em; vertical-align: top; width: 5.5em; background-size: contain; } -.player-video-title { font-size: 2.4em; margin: -0.1em 0px 0px; overflow: hidden; text-overflow: ellipsis; } -.quality-status { display: none; padding-top: 0.2em; } -.title-tray-inflated .quality-status { display: inline-block; } -.quality-status-hd-badge { border-radius: 2px; color: rgb(65, 65, 65); font-size: 0.6em; font-weight: bold; padding: 0.125em 0.5em; background: rgb(241, 241, 241); } -.ypc-preview { display: none; } -.ypc-playback .ypc-preview { display: block; } -.player-controls #button-list .focused, .player-controls #button-list div:hover { border-radius: 0.05em; color: rgb(0, 0, 0); } -.player-controls #button-list .focused { background-color: rgb(255, 255, 255); } -.player-controls #button-list div:hover { background-color: rgb(157, 148, 149); } -.player-controls #button-list .button, .player-controls #button-list .toggle-button { display: inline-block; font-size: 1.4em; height: 1.3em; margin: 1em; padding-bottom: 0.4em; padding-top: 0.8em; top: 0px; width: 2.3em; } -.player-controls #button-list .button span, .player-controls #button-list .toggle-button span { font-family: roboto-regular; font-size: 0.7em; left: -10%; margin: 0.5em 0px 0px; width: 120%; height: 120%; } -.player-controls #button-list .button.spacer { visibility: hidden; cursor: auto; } -#transport-controls.focused .player-controls #button-list div { color: rgb(255, 255, 255); } -#transport-controls.focused .player-controls #button-list .focused { color: rgb(34, 34, 34); } -.player-controls #button-list div { color: rgb(170, 170, 170); cursor: pointer; vertical-align: middle; } -#transport-controls.ad-active .player-controls #button-list div.disabled { visibility: hidden; } -#transport-controls.ad-active .player-controls #button-list div.skip-ad-button.disabled { visibility: visible; opacity: 1; } -.player-controls #button-list div.disabled:hover { color: rgb(255, 255, 255); background-color: transparent; } -.player-controls #button-list div.focused { opacity: 1; } -.player-controls #button-list div.disabled { opacity: 0.2; } -.player-controls #button-list .icon-player-closedcaptions.toggle-selected, .player-controls #button-list .icon-like.toggle-selected, .player-controls #button-list .icon-dislike.toggle-selected { color: rgb(39, 147, 230) !important; } -.player-controls #button-list .icon-logo-lozenge.toggle-selected { color: rgb(255, 0, 0) !important; } -#transport-controls .player-controls #button-list div.icon-player-more, #transport-controls .player-controls #button-list div.icon-player-less { color: rgb(133, 133, 133); } -.player-controls .toggle-button span, .player-controls .button span, .player-controls .toggle-button.disabled span, .player-controls .button.disabled span { display: none; margin-top: 1em; color: rgb(255, 255, 255); font-size: 0.75em; padding: 0px; position: relative; text-align: center; top: 1em; width: 100%; } -.lang-case-sensitive .player-controls .button span::first-letter, .lang-case-sensitive .player-controls .toggle-button span::first-letter { text-transform: uppercase; } -#transport-controls.focused, .player-controls .toggle-button.focused span, .player-controls div:hover.toggle-button span, .player-controls .button.focused span, .player-controls div:hover.button span { display: block; } -.player-seekbar { position: relative; } -.progress-bar { height: 4em; left: 11%; position: absolute; top: -9em; width: 75%; padding: 0px 1.5%; } -.progress-bar .progress-bar-playhead, .progress-bar .progress-bar-line { top: 2.5em; } -.progress-bar .progress-bar-line { position: relative; width: 100%; } -.progress-bar .progress-bar-line div { height: 2px; position: absolute; } -.progress-bar .progress-bar-playhead { height: 2px; position: relative; width: 100%; } -.progress-bar .progress-bar-line .progress-bar-background { width: 100%; background-color: rgb(91, 91, 91); } -.progress-bar .progress-bar-line .progress-bar-played { background-color: rgb(227, 44, 41); } -.progress-bar .progress-bar-line .progress-bar-loaded { background-color: rgb(153, 153, 153); } -.ypc-playback .progress-bar-line .progress-bar-played { background-color: rgb(39, 147, 230); } -.progress-bar .progress-bar-disc { border-radius: 50%; height: 0.6em; margin: -0.25em 0px 0px -0.25em; position: absolute; width: 0.6em; background-color: rgb(204, 204, 204); } -.progress-bar .cue-range-markers { height: 100%; position: absolute; width: 100%; } -.progress-bar-disc { pointer-events: none; } -.ad-active .progress-bar .cue-range-markers { visibility: hidden; } -.progress-bar .cue-range-markers .cue-range-marker { height: 2px; margin: 0px 0px 0px -0.1em; position: absolute; width: 0.2em; background-color: rgba(255, 255, 255, 0); } -.progress-bar .cue-range-markers .ad-marker { background-color: rgb(230, 188, 39); } -.progress-bar.ad-active .progress-bar-played { background-color: rgb(214, 203, 35); } -#player-time-elapsed, .player-time-total, .live-indicator { color: rgba(255, 255, 255, 0.74902); font-size: 1.2em; position: absolute; top: -6em; width: 12%; } -.limited-graphics #player-time-elapsed, .limited-graphics .player-time-total { color: rgb(255, 255, 255); } -#player-time-elapsed { left: 0px; text-align: right; } -.player-time-total, .live-indicator { right: 0px; text-align: left; } -#transport-controls.ad-active #player-time-elapsed, #transport-controls.ad-active .player-time-total { display: none; } -.live-indicator { display: none; font-size: 1.3em; position: absolute; top: -5.6em; width: 11.7%; } -.live-playback .live-indicator { display: block; } -.live-playback .player-time-total, .live-playback .elapsed-time, .fresh-transport-controls.live-playback .player-time-total, .fresh-transport-controls.live-playback #player-time-elapsed { display: none; } -.live-playback .progress-bar-disc { background-color: rgb(230, 33, 23); } -#watch .loading-indicator { top: 30%; } -#transport-spacer:hover { background: none; } -.html5-video-controls { position: absolute; width: 100%; height: 0px; bottom: 2em; transition: all 0.6s ease; } -.ytp-player-content { position: absolute; bottom: 0px; height: 0px; left: 0px; right: 0px; } -.html5-video-content { position: absolute; } -.caption-window { position: absolute; pointer-events: none; } -.standard-caption-window { position: absolute; white-space: normal; width: 80%; } -.caption-window-transform { display: inline-block; line-height: 1.32em; } -.html5-video-player .captions-text { position: relative; } -.html5-video-player .caption-row { padding-bottom: 5px; padding-top: 5px; } -.anchor-point-1 { transform: translate(-50%, 0px); } -.anchor-point-2 { transform: translate(-100%, 0px); } -.anchor-point-3 { transform: translate(0px, -50%); } -.anchor-point-4 { transform: translate(-50%, -50%); } -.anchor-point-5 { transform: translate(-100%, -50%); } -.anchor-point-6 { transform: translate(0px, -100%); } -.anchor-point-7 { transform: translate(-50%, -100%); } -.anchor-point-8 { transform: translate(-100%, -100%); } -.anchor-point-0, .anchor-point-1, .anchor-point-2 { padding-top: 3em; } -.watch.transport-showing .anchor-point-0, .watch.transport-showing .anchor-point-1, .watch.transport-showing .anchor-point-2 { padding-top: 9em; } -.anchor-point-0, .anchor-point-3, .anchor-point-6 { padding-left: 3em; } -.anchor-point-2, .anchor-point-5, .anchor-point-8 { padding-right: 3em; } -.anchor-point-6, .anchor-point-7, .anchor-point-8, .eureka .watch.transport-showing .anchor-point-6, .eureka .watch.transport-showing .anchor-point-7, .eureka .watch.transport-showing .anchor-point-8 { padding-bottom: 3em; } -.watch.transport-showing .anchor-point-6, .watch.transport-showing .anchor-point-7, .watch.transport-showing .anchor-point-8 { padding-bottom: 15em; } -.watch.pivot-focused .anchor-point-6 { padding-bottom: 17.5em; } -.watch.pivot-focused .anchor-point-7, .watch.pivot-focused .anchor-point-8 { padding-bottom: 16em; } -.watch .ytp-fresca-module, .search-focused .watch.message .ytp-fresca-module { display: none; } -.watch.message .ytp-fresca-module { color: rgb(255, 255, 255); display: block; font-size: 2em; padding-left: 1.5em; position: absolute; top: 30%; width: 100%; background-color: rgba(0, 0, 0, 0.498039); } -.watch.message .ytp-fresca-show-countdown { padding-bottom: 1.3em; } -.ytp-fresca-countdown { font-size: 1.4em; } -.pivot-shelf-list { margin-top: 12.5em; padding-left: 7em; transition: transform 0.25s, opacity 0.25s; transform: translateY(10em); } -.pivot-shelf-list.hidden { opacity: 0; display: block !important; } -.limited-animation .pivot-shelf-list.hidden, .forced-limited-animation.pivot-shelf-list.hidden { display: none !important; } -.pivot-shelf-list.animate-in { transform: translateY(0px); } -.pivot-shelf-list > .carousel { opacity: 0.5; transition: opacity 0.25s; } -.limited-memory .pivot-shelf-list { opacity: 1; } -.pivot-shelf-list .title-container { color: rgb(255, 255, 255); } -.pivot-shelf .tile-title .author, .pivot-shelf .tile-title .view { color: rgb(225, 225, 225); } -.pivot-shelf-list.focused, .post-play .pivot-shelf-list { height: 17.5em; margin-top: 2.5em; padding-top: 10em; transform: translateY(-7.5em); background: linear-gradient(rgba(0, 0, 0, 0), rgb(0, 0, 0)); } -.post-play .pivot-shelf { opacity: 0.5; } -.post-play .pivot-shelf-list.focused .pivot-shelf, .pivot-shelf-list.focused > .carousel { opacity: 1; } -.pivot-shelf-list .focused.list { height: 0px; } -.pivot-shelf-list .no-content-message { display: none; } -.pivot-shelf-list.forced-limited-animation, .limited-animation .pivot-shelf-list, .limited-animation .pivot-shelf-list > .carousel { transition: none; } -.pivot-shelf-list.forced-limited-animation .placeholder-tile, .limited-animation .pivot-shelf-list .placeholder-tile { height: 7.83em; width: 14em; } -#pivot-post-play .pivot-video-tile, #pivot-post-play .placeholder-tile { height: 10.625em; width: 18.5em; } -#pivot-post-play .tile-top { height: 10.625em; } -.limited-animation #pivot-post-play .tile-top, #pivot-post-play.forced-limited-animation .tile-top { height: 9.825em; width: 17.7em; } -.pivo`t-video-tile, .pivot-channel-tile { height: 7.83em; width: 14em; } -.forced-limited-animation .pivot-video-tile, .forced-limited-animation .pivot-auto-play-tile, .forced-limited-animation .pivot-channel-tile, .pivot-shelf-list.forced-limited-animation .placeholder-tile, #pivot-post-play.forced-limited-animation .placeholder-tile, .limited-animation .pivot-video-tile, .limited-animation .pivot-auto-play-tile, .limited-animation .pivot-channel-tile, .limited-animation #pivot-post-play .placeholder-tile, .limited-animation .pivot-shelf-list .placeholder-tile { display: inline-block; margin-right: 0.5em; position: relative; vertical-align: bottom; background: none; } -.forced-limited-animation .pivot-channel-tile, .limited-animation .pivot-channel-tile { border-radius: 100%; width: 10.625em; } -.forced-limited-animation .pivot-video-tile.focused, .forced-limited-animation .pivot-auto-play-tile.focused .pivot-video-tile, .limited-animation .pivot-video-tile.focused, .limited-animation .pivot-auto-play-tile.focused .pivot-video-tile { background-color: rgb(255, 255, 255); } -.pivot-video-tile .tile-top { height: 7.83em; } -.forced-limited-animation .pivot-video-tile .tile-top, .limited-animation .pivot-video-tile .tile-top { height: 7.03em; padding: 0.4em; width: 13.2em; background-color: inherit; } -.forced-limited-animation .pivot-video-tile.focused .tile-top, .limited-animation .pivot-video-tile.focused .tile-top { background-color: rgb(255, 255, 255); } -.pivot-video-tile .tile-overlay { color: rgb(255, 255, 255); display: none; height: 100%; margin-top: -7.83em; text-align: center; width: 100%; background-color: rgba(0, 0, 0, 0.498039); } -.forced-limited-animation .pivot-video-tile .tile-overlay, .limited-animation .pivot-video-tile .tile-overlay { margin-top: -7.03em; } -#pivot-post-play .pivot-video-tile .tile-overlay { margin-top: -10.625em; } -.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay, #pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay { margin-top: -9.875em; } -.pivot-video-tile.has-overlay .tile-overlay { display: block; } -#pivot-post-play .pivot-video-tile.has-overlay .tile-overlay { opacity: 0; } -#pivot-post-play.focused .pivot-video-tile.has-overlay .tile-overlay { opacity: 1; } -.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .label { display: none; } -.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play { font-size: 4em; } -.post-play .pivot-shelf-list .pivot-video-tile.has-overlay .icon-player-play::before { content: ""; } -.pivot-video-tile .tile-overlay .icon { font-family: youtube-icons; font-size: 3em; padding-top: 0.5em; } -.pivot-video-tile .tile-overlay .label { font-size: 1.2em; } -#pivot-post-play .pivot-video-tile .tile-overlay { color: rgb(225, 225, 225); } -#pivot-post-play .pivot-video-tile .tile-overlay .icon { font-size: 4.5em; padding-bottom: 0.15em; padding-top: 0.4em; } -#pivot-post-play .pivot-video-tile .tile-overlay .label, #pivot-post-play .pivot-video-tile .tile-overlay .icon { opacity: 0; transition: opacity 0.25s; } -#pivot-post-play.focused .pivot-video-tile .tile-overlay .label, #pivot-post-play.focused .pivot-video-tile .tile-overlay .icon { opacity: 1; } -.limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .label, .limited-animation #pivot-post-play .pivot-video-tile .tile-overlay .icon, #pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .label, #pivot-post-play.forced-limited-animation .pivot-video-tile .tile-overlay .icon { transition: none; } -.pivot-video-tile .video-thumb { height: 100%; width: 100%; background-size: 100%; background-position: 50% 50%; background-repeat: no-repeat; } -.pivot-video-tile .decoration { margin-top: -2.1em; text-align: right; } -.pivot-video-tile .duration { font-size: 1em; font-weight: bold; padding: 0.5em; background-color: rgba(0, 0, 0, 0.701961); } -.pivot-auto-play-tile { height: 10.625em; overflow: visible; width: 18.5em; background: none; } -.forced-limited-animation .pivot-auto-play-tile, .limited-animation .pivot-auto-play-tile { height: 10.625em; width: 18.5em; } -.pivot-auto-play-tile .post-play-countdown { display: block; font-size: 1.8em; margin-left: 10.8em; opacity: 0; pointer-events: none; position: absolute; text-align: left; text-shadow: none; top: 0px; width: 17.5em; } -.pivot-auto-play-tile.countdown-active .post-play-countdown { opacity: 1; pointer-events: inherit; } -.pivot-auto-play-tile .details, .pivot-auto-play-tile .title { color: rgb(255, 255, 255); opacity: 0; pointer-events: none; } -.pivot-auto-play-tile.focused .details, .pivot-auto-play-tile.focused .title { opacity: 1; pointer-events: inherit; } -.pivot-auto-play-tile .title { font-size: 1.4em; margin-left: 14em; max-height: 2.5em; overflow: hidden; position: absolute; top: 2.2em; width: 20em; } -.pivot-auto-play-tile .details { font-size: 1.1em; margin-left: 17.8em; position: absolute; top: 6em; width: 37em; } -.pivot-auto-play-tile .details, .pivot-auto-play-tile .title, .pivot-auto-play-tile .post-play-countdown { transition: opacity 0.25s; } -.limited-animation .pivot-auto-play-tile .details, .limited-animation .pivot-auto-play-tile .title, .limited-animation .pivot-auto-play-tile .post-play-countdown { transition: none; } -#pivot-post-play .pivot-auto-play-tile .pivot-video-tile { padding-left: 0px; padding-top: 0px; } -#pivot-post-play #post-play-list .no-content-message { display: none; } -.forced-limited-animation .pivot-horizontal-list, .limited-animation .pivot-horizontal-list { margin-left: -15em; } -.pivot-horizontal-list.focused .pivot-sliding-highlighter, .post-play #post-play-list.focused .pivot-sliding-highlighter { display: block; } -.pivot-horizontal-list .pivot-sliding-highlighter, .post-play .pivot-sliding-highlighter { border: 0.5em solid rgb(255, 255, 255); box-shadow: rgb(0, 0, 0) 0.083em 0.083em 0.75em 0.167em inset; height: 7.5em; margin-left: -0.4em; margin-top: -0.4em; pointer-events: none; width: 13.8em; background: transparent; } -.pivot-shelf { position: absolute; width: 0px; } -.forced-limited-animation .pivot-shelf, .limited-animation .pivot-shelf { opacity: 0.5; position: relative; } -.forced-limited-animation .pivot-shelf.focused, .limited-animation .pivot-shelf.focused { opacity: 1; } -.limited-memory.limited-animation .pivot-shelf { opacity: 1; } -.pivot-shelf .title-container { margin-bottom: 1em; visibility: hidden; white-space: nowrap; } -.pivot-shelf .title-container .icon { font-family: youtube-icons; vertical-align: middle; } -.pivot-shelf .tile-title span { display: inline-block; overflow: hidden; text-overflow: ellipsis; } -.pivot-shelf.focused .title-container { visibility: visible; } -.pivot-shelf .tile-title, .pivot-shelf .shelf-title { margin-bottom: 0.3em; } -.pivot-shelf .tile-title { height: 1.7em; } -.pivot-shelf .tile-title .title { font-size: 1.3em; max-width: 30em; } -.pivot-shelf .tile-title .author, .pivot-shelf .tile-title .view { margin-left: 0.3em; max-width: 20em; } -.pivot-shelf .tile-title .author, .pivot-sliding-highlighter .select { display: none; } -.pivot-shelf.has-author .tile-title .author { display: inline-block; } -.forced-limited-animation .pivot-horizontal-list .list, .limited-animation .pivot-horizontal-list .list { width: 98em; } -.forced-limited-animation .postplay-horizontal-list .list, .limited-animation .postplay-horizontal-list .list { margin-left: -13.4em; width: 98em; } -.forced-limited-animation .pivot-channel-tile.focused .tile-top, .limited-animation .pivot-channel-tile.focused .tile-top { background-color: rgb(255, 255, 255); } -.forced-limited-animation .pivot-channel-tile .tile-top, .limited-animation .pivot-channel-tile .tile-top { height: 6.83em; padding: 0.4em; width: 6.83em; } -.pivot-channel-tile .tile-top { border-radius: 50%; height: 7.83em; margin: 0px auto; overflow: hidden; width: 7.83em; background: none; } -.pivot-channel-tile .tile-top .video-thumb { background-color: rgba(0, 0, 0, 0); } -.pivot-channel-tile .video-thumb { border-radius: 50%; } -.pivot-shelf .pivot-horizontal-list.channel-selected .pivot-sliding-highlighter { border-radius: 50%; height: 7.5em; margin-left: -0.3em; margin-top: -0.3em; transform: translateX(3.2em); width: 7.5em; } -.pivot-shelf.channel-selected .shelf-title { visibility: hidden; } -.pivot-footer { height: 9em; } -.pivot-button-list { padding-top: 4em; } -.pivot-button-list .icon-button { display: inline-block; padding: 0.5em 1em; } -.pivot-button-list .icon-button .icon { font-family: youtube-icons; margin-right: 0.3em; } -.pivot-footer.focused .pivot-button-list .icon-button.selected { background-color: rgb(255, 255, 255); } -.pivot-button-list .icon-button span { color: rgb(255, 255, 255); font-size: 1.5em; } -.pivot-footer.focused .pivot-button-list .icon-button.selected span { color: rgb(0, 0, 0); } -#pivot-post-play { padding-left: 6em; padding-top: 10em; } -.limited-animation #pivot-post-play, #pivot-post-play.forced-limited-animation { padding-left: 0px; } -#pivot-post-play #post-play-list { font-size: 1.1em; margin-left: 0.1em; } -.forced-limited-animation .pivot-auto-play-tile, .limited-animation .pivot-auto-play-tile { padding-left: 0px; vertical-align: bottom; } -#pivot-post-play.forced-limited-animation .pivot-video-tile, .limited-animation #pivot-post-play .pivot-video-tile { vertical-align: bottom; } -.forced-limited-animation .pivot-auto-play-tile .pivot-video-tile, .limited-animation .pivot-auto-play-tile .pivot-video-tile { display: block; position: absolute; } -#pivot-post-play .pivot-sliding-highlighter { border-width: 0.5em; height: 9.9em; margin-top: 0px; width: 18.4em; } -.limited-animation.sets-ui .exp-densityBrowse .auto-play-tile:not(.focused) .video-tile, .limited-animation .exp-densityBrowse .auto-play-tile.focused .video-tile, .limited-animation .exp-densityBrowse .auto-play-tile { background-color: inherit; } -.limited-animation .exp-densityBrowse .auto-play-tile.focused .tile-top { background: rgb(255, 255, 255); } -.limited-animation .exp-densityBrowse .auto-play-tile .post-play-countdown { top: -2.67em; } -.loki-video-source { color: rgb(255, 255, 255); font-size: 1.5em; left: 5em; position: absolute; top: 2.6em; } -.loki-title-card { bottom: 0px; display: block; height: 25%; position: absolute; width: 100%; background: linear-gradient(to top, rgba(0, 0, 0, 0.901961) 0%, rgba(0, 0, 0, 0.6) 80%, transparent 100%); } -.loki-title-card .loki-metadata { color: rgb(241, 241, 241); height: 100%; margin-bottom: 2.6em; margin-left: 8em; overflow: hidden; white-space: nowrap; width: 100%; } -.loki-metadata #loki-progress-bar { display: block; height: 2em; left: 8em; padding: 0px; position: absolute; top: -4em; width: 80%; } -#loki-progress-bar .progress-bar-playhead { display: none; } -.loki-metadata .loki-video-avatar { display: inline-block; height: 8em; width: 8em; background-size: contain; } -.loki-metadata .loki-video-text { display: inline-block; height: 100%; margin: 0px 5em 0px 3.5em; width: 80%; } -.loki-video-text .loki-video-title { font-size: 2.4em; margin-top: -0.1em; overflow: hidden; text-overflow: ellipsis; width: 80%; } -.loki-video-text .loki-channel-name { font-size: 1.5em; margin-top: 0.4em; overflow: hidden; text-overflow: ellipsis; width: 80%; } -.loki-video-text .loki-video-description { line-height: 1.4em; margin-top: 0.4em; max-height: 4.2em; overflow: hidden; white-space: normal; width: 80%; } -.toaster { color: rgb(170, 170, 170); font-size: 133%; position: absolute; top: 0px; width: 100%; } -.toaster .list { margin-top: 0.8em; position: absolute; width: 100%; } -.toaster .toast { min-height: 3.5em; overflow: hidden; position: relative; text-align: center; width: 100%; transition: all 0.6s ease; } -.toaster .toast-container { border: 1px solid black; display: inline-block; margin: 0.2em 0px 1em; max-width: 60%; opacity: 1; padding: 0.5em 1em 0.6em; transition: all 0.3s ease; background-color: rgba(27, 25, 26, 0.8); } -.toaster .toast.toast-removing .toast-container { opacity: 0; } -.toaster .toast-container > div { display: inline-block; vertical-align: middle; } -.toaster .toast-icon { height: 1.2em; width: 1.2em; background-size: 1.1em 1.1em; background-position: 50% 50%; background-repeat: no-repeat; } -.device-toast .toast-container { padding: 0.7em; } -.toaster .device-toast .toast-msg { padding-left: 0.8em; background-size: 1.1em 1.1em; background-position: 0% 50%; background-repeat: no-repeat; } -.toaster .avatar { height: 2.6em; width: 2.6em; } -.toaster .avatar > div { height: inherit; width: inherit; background-size: cover; background-position: 50% 50%; } -.toaster .video-image > div { height: 100%; width: 100%; background-size: cover; background-position: 50% 50%; } -.toast .update-playlist-toast { bottom: 0px; max-width: 14em; padding: 0.8em; position: fixed; right: 0px; text-align: left; } -.update-playlist-toast .overlay { height: 55%; margin-left: 56%; margin-top: -55%; opacity: 0.8; width: 44%; background: rgb(0, 0, 0); } -.update-playlist-toast .video-count { font-size: 2.3em; font-weight: normal; line-height: 1.2em; padding-top: 0.8em; text-align: center; } -.update-playlist-toast .icon-playlist { font-family: youtube-icons; font-size: 2.2em; height: 50%; overflow: hidden; padding: 0.2em; text-align: center; } -.update-playlist-toast .avatar { padding: 0.3em; } -.update-playlist-toast .contrast-container { padding: 0.4em; background-color: rgba(0, 0, 0, 0.8); } -.update-playlist-toast .tile-top { height: 7.7em; width: 14em; } -.update-playlist-toast .toast-msg { font-size: 85%; padding-left: 0.6em; } -.update-playlist-toast .truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 13.2em; } -.update-playlist-toast .toast-msg.avatar { height: 2.1em; width: 10em; overflow: hidden; } -.update-playlist-toast .toast-msg.truncate { white-space: normal; } -.update-playlist-toast .toast-msg.no-user-avatar { font-size: 85%; margin-left: -2.2em; } -.update-playlist-toast .wrapper > div { display: inline-block; vertical-align: middle; } -.toaster .toast-icon { max-width: 100%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png); background-size: 100%; } -.toast-icon.avatar { background-image: none; } -.toaster .android-phone-connected { background-position: 0px 0%; } -.toaster .android-phone-disconnected { background-position: 0px 10.14%; } -.toaster .android-tablet-connected { background-position: 0px 20.29%; } -.toaster .android-tablet-disconnected { background-position: 0px 30.43%; } -.toaster .ios-phone-connected { background-position: 0px 40.58%; } -.toaster .ios-phone-disconnected { background-position: 0px 50.72%; } -.toaster .ios-tablet-connected { background-position: 0px 60.87%; } -.toaster .ios-tablet-disconnected { background-position: 0px 71%; } -.toaster .laptop-connected { background-position: 0px 81.16%; } -.toaster .laptop-disconnected { background-position: 0px 91.3%; } -.toaster .remote-connected { background-size: 233.33%; background-position: 0px 100%; } -.toaster .remote-disconnected { background-size: 233.33%; background-position: 0px 100%; } -.toaster .toast-progress { border: 1px solid rgb(170, 170, 170); width: 10em; } -.toaster .toast-progress .progress { height: 1em; background-color: rgb(102, 102, 102); } -.toaster .volume-muted { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png); } -.toaster .volume-low { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png); } -.toaster .volume-mid { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png); } -.toaster .volume-high { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png); } -.toaster .volume-toast .toast-msg { text-align: right; width: 1.2em; } -.toaster .volume-toast .toast-container { transition-delay: 0.3s; } -.toaster .volume-toast.toast-removing .toast-container { transition-delay: 0s; } -.unlimited-welcome-toast .toast-container { box-shadow: rgb(0, 0, 0) 0em 0em 0.6em 0.02em; height: 6.5em; margin: 0em; padding: 0px; position: fixed; right: 0px; text-align: left; top: 0px; width: 24.5em; transform: translateX(0px); opacity: 1; transition: all 0.6s ease; } -.unlimited-welcome-toast.toast-displaying .toast-container { opacity: 0; transform: translateX(18em); } -.limited-animation .unlimited-welcome-toast .toast-container { opacity: 1; transition: none; transform: none; } -.unlimited-toast-messages { position: absolute; padding-top: 2.1em; padding-left: 1.3em; width: 12em; } -.unlimited-toast-msg-top { color: rgb(221, 221, 221); line-height: 1em; } -.unlimited-toast-msg-bottom { padding-top: 0.5em; font-size: 0.7em; } -.unlimited-toast-background { height: 100%; width: 9em; background-size: 100%; background-position: 0% 50%; background-repeat: no-repeat; } -.unlimited-toast-logo { height: 100%; background-size: 100%; background-repeat: no-repeat; } -#dialog { color: rgb(255, 255, 255); display: none; height: 100%; left: 0px; position: absolute; top: 0px; width: 100%; } -#error-markup #dialog { display: block; } -#dialog.focused { display: block; } -#dialog-wrapper { height: 30em; margin-top: 11.1em; padding: 1.3em 6em; position: relative; background-color: rgb(0, 0, 0); } -#dialog.browse-sets #dialog-wrapper { height: 100%; margin-top: 0px; padding: 1.3em 10%; background-color: rgba(32, 32, 32, 0.498039); } -#dialog .dialog-contents { background: 90% 30% no-repeat; } -#dialog.browse-sets .dialog-contents .icon-simple-dialog { color: rgb(255, 255, 255); } -#dialog .dialog-contents .dialog-large-icon { display: none; } -#dialog.browse-sets .dialog-contents .dialog-large-icon { display: inline-block; font-family: youtube-icons; font-size: 10em; height: 2.5em; line-height: 2.5em; text-align: center; width: 35%; } -#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .extra-info { color: rgba(255, 255, 255, 0.74902); display: block; font-family: monospace; font-size: 1.5em; line-height: 1.4em; padding-top: 0.8em; } -#dialog.browse-sets .icon-simple-dialog .icon-dialog-content .label { display: block; font-size: 1.8em; line-height: 1.1em; padding-top: 6.45em; } -#dialog .dialog-contents .header .title { font-size: 2.5em; } -#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header { border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgba(255, 255, 255, 0.2); height: 3.4em; margin: 0px 1.5em; } -#dialog.browse-sets.browse-sets-titled-dialog .dialog-contents .header .title { color: rgba(255, 255, 255, 0.498039); display: block; font-size: 1.3em; font-weight: 300; height: 3em; line-height: 3em; } -#dialog.browse-sets .buttons { font-size: 1.8em; margin-right: 2%; margin-top: 0.8em; text-align: right; } -#dialog.browse-sets .connection-steps { padding: 0px; } -#dialog.browse-sets.exit .dialog-contents .header .title { display: block; padding: 1em 6.5em 3em; } -#dialog.browse-sets .dialog-contents { height: 80%; margin-top: 5%; background-color: rgb(0, 0, 0); } -#dialog.browse-sets.closed-captions .dialog-contents { height: 75%; } -#dialog.browse-sets .dialog-cancel-button { text-align: center; } -.video-overview .dialog-contents { font-size: 2em; } -#dialog.qr-dialog .dialog-contents { color: rgb(204, 204, 204); font-size: 1.1em; overflow: hidden; padding-top: 4em; } -#dialog.qr-dialog .dialog-contents .header .title { color: rgb(255, 255, 255); font-size: 2em; } -#dialog .box { padding-top: 1.5em; } -#dialog.qr-dialog a { color: rgb(255, 255, 255); display: block; font-size: 1.5em; } -#dialog.qr-dialog .qr { height: 7em; margin: 0.2em 0px; width: 7em; background-size: 100%; } -#dialog.qr-dialog .dialog-icon { display: block; background-size: 12em; } -#dialog.help .dialog-icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png); } -#dialog.feedback .dialog-icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png); } -#dialog.system-error .dialog-icon { font-family: youtube-icons; font-size: 10em; margin-right: 0px; padding-right: 0.5em; padding-top: 0.5em; text-align: right; width: 2em; } -#dialog.system-error .dialog-icon::before { content: ""; } -#dialog.qr-dialog.browse-sets .dialog-icon { display: none; } -#dialog .text-dialog { bottom: 1.5em; left: 0px; padding: 2em 20em 0px 6em; position: absolute; white-space: normal; } -#dialog.text-dialog .dialog-contents .header .title { font-size: 3em; padding-bottom: 0.5em; } -.text-dialog #dialog-view { color: rgb(170, 170, 170); padding-bottom: 1em; width: 90%; } -.text-dialog #dialog-view .dialog-contents { font-size: 1.8em; } -#dialog.browse-sets .icon-dialog-content { display: inline-block; height: 25em; vertical-align: top; width: 60%; } -#dialog-view .url { color: rgb(255, 255, 255); font-size: 1.25em; padding-bottom: 0.8em; } -#dialog-view .flag-claim .url { padding-bottom: 0.5em; } -#dialog-view .reset-help { display: block; width: 25em; } -#dialog.browse-sets .tos-dialog .icon-dialog-content { padding-top: 9em; } -#dialog.browse-sets .tos-dialog .icon-dialog-content .subtitle { color: rgb(170, 170, 170); } -#dialog.browse-sets .tos-dialog .icon-dialog-content .url { font-size: 2em; } -#dialog.browse-sets.qr-dialog .dialog-contents { padding-top: 0px; } -#dialog.browse-sets.qr-dialog .icon-dialog-content .link { margin-top: 5em; padding-top: 0px; } -#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper { margin-top: 2em; } -#dialog.browse-sets.qr-dialog .icon-dialog-content .qr-code-wrapper .qr { border: 0.2em solid rgba(255, 255, 255, 0.0980392); padding: 0.5em; } -#dialog .signed-out-dialog { font-size: 1.8em; } -.connection-error, .connection-steps { display: inline-block; font-weight: 300; padding: 0px 1em 1em 2em; white-space: normal; } -.connection-error { vertical-align: top; } -.connection-error div { margin-bottom: 1em; } -#dialog .login-dialog .activation-code { font-size: 1.3em; letter-spacing: 0.1em; line-height: 1.3em; } -#dialog .sets-login-dialog .body-text { display: inline-block; height: 25em; vertical-align: top; width: 50%; } -#dialog .sets-login-dialog .body-text .connection-instructions { font-size: 1.9em; margin-top: 3.5em; } -#dialog .sets-login-dialog .standard-message, #dialog .sets-login-dialog .like-dislike-message, #dialog .sets-login-dialog .subscribe-message, #dialog .sets-login-dialog .upload-message, #dialog .sets-login-dialog .player-message { display: none; } -#dialog.standard-login .sets-login-dialog .standard-message, #dialog.like-dislike-login .sets-login-dialog .like-dislike-message, #dialog.subscribe-login .sets-login-dialog .subscribe-message, #dialog.upload-login .sets-login-dialog .upload-message, #dialog.player-login .sets-login-dialog .player-message { display: block; } -#dialog .pairing .qr-code-wrapper { display: inline-block; vertical-align: top; } -#dialog .manual-connect-content .connection-steps { padding: 0px; } -#dialog .manual-connect-content .connection-steps .label { color: rgb(170, 170, 170); font-size: 0.7em; margin-top: 1em; } -#dialog .manual-connect-content .connection-steps .step1, #dialog .manual-connect-content .connection-steps .step2 { margin-top: 0.7em; } -#dialog .manual-connect-content .connection-steps .pair-url, #dialog .manual-connect-content .connection-steps .pair-code { margin-left: 0.3em; } -#dialog.browse-sets .manual-connect-content .connection-steps .label { font-size: 1.3em; } -#dialog.browse-sets .manual-connect-content .connection-steps .step1, #dialog.browse-sets .manual-connect-content .connection-steps .step2 { display: inline-block; font-size: 1.3em; } -#dialog.browse-sets .manual-connect-content .connection-steps .pair-url, #dialog.browse-sets .manual-connect-content .connection-steps .pair-code { display: inline-block; font-size: 1.3em; margin-left: 0.3em; } -#dialog.browse-sets .pairing .connection-instructions { font-size: 1em; padding-top: 10em; } -#dialog .manual-connect .dial-upsell-content { display: none; } -#dialog .dial-upsell .manual-connect-content .connection-steps .no-dial-connect-step1, #dialog .manual-connect .manual-connect-content .connection-steps .with-dial-connect-step1 { display: none; } -#dialog .manual-connect .manual-connect-content .connection-steps { font-size: 1.5em; } -#dialog .manual-connect .manual-connect-content .connection-steps .label { display: none; } -#dialog.browse-sets .dial-upsell .dial-upsell-content { font-size: 1.8em; white-space: normal; width: 80%; } -#dialog.browse-sets .dial-upsell .dial-upsell-content .cast-icon { height: 1.3em; margin: 0px; width: 1.5em; } -#dialog.browse-sets .dial-upsell .manual-connect-content { color: rgb(170, 170, 170); font-size: 1.4em; line-height: 1em; } -#dialog.browse-sets .remote-reset-dialog .connected-list .connected-header { color: rgb(255, 255, 255); font-size: 1.5em; margin-top: 6em; } -#dialog.browse-sets .remote-reset-dialog .connected-list .devices { display: inline-block; font-size: 1em; } -#dialog.browse-sets .remote-reset-dialog .connected-list .devices > div { display: inline-block; font-size: 1em; padding-left: 0px; padding-right: 1.5em; width: 10em; } -#dialog.browse-sets .remote-reset-dialog .reset-help { font-size: 1.5em; margin-top: 1em; } -#dialog .logout-authenticated-info { padding: 2.5em 0px; } -#dialog .login-user-icon { display: inline-block; height: 4em; margin: 2em 2em 0px 0px; width: 4em; background-size: cover; } -#dialog.browse-sets .login-user-icon { margin: 0px 15%; border-radius: 20em; } -#dialog .login-user-info { display: inline-block; margin-left: 1.7em; margin-top: -0.8em; font-size: 2em; font-weight: 300; width: 82%; } -#dialog .login-user-info h3 { font-size: 2.2em; font-weight: normal; margin: 0px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } -#dialog.browse-sets .logout-authenticated-info { padding: 0px; } -#dialog.browse-sets .login-user-info { height: 13em; margin: 0px; width: 100%; } -#dialog.browse-sets .login-user-info .display-name, #dialog.browse-sets .login-user-info .platform-container { display: none; } -#dialog.browse-sets .login-user-info .signed-in-message { display: inline-block; width: 50%; } -#dialog.browse-sets .login-user-info .signed-in-label strong { color: rgb(255, 255, 255); display: block; font-size: 2.5em; overflow: hidden; text-overflow: ellipsis; } -#dialog.browse-sets .login-user-info .signed-in-label { color: rgb(170, 170, 170); font-size: 0.5em; margin-top: 10em; } -#dialog.browse-sets .login-user-info .sign-out-label { margin-top: 1em; } -#dialog .spinner { height: 10em; width: 10em; } -#dialog .spinner .loading-indicator { height: 100%; width: 100%; background-size: contain; } -#dialog .buttons { font-size: 3em; font-weight: 300; padding-top: 0.3em; } -#dialog .buttons > div { color: rgb(0, 0, 0); cursor: pointer; display: inline-block; min-width: 2.4em; padding: 0px 0.3em; text-align: center; background-color: rgb(51, 51, 51); } -#dialog.browse-sets .buttons .button { color: rgba(255, 255, 255, 0.498039); min-width: 3em; padding: 0.2em 0.8em; background-color: rgb(0, 0, 0); } -#dialog.browse-sets .buttons .focused, #dialog.browse-sets .buttons .button.focused:hover { color: rgb(102, 102, 102); background-color: rgb(241, 241, 241); } -#dialog .buttons .button:hover, #dialog.browse-sets .buttons .button:hover { background-color: rgb(102, 102, 102); } -#dialog .buttons div { margin-left: 0.5em; } -#dialog .buttons .focused, #dialog .buttons .focused:hover { color: rgb(102, 102, 102); background-color: rgb(241, 241, 241); } -#dialog .whichOneIsThis-logout-dialog .logout-prompt { font-size: 1.7em; } -#dialog .logout-prompt { margin-top: 6em; } -.scrolling-text { font-size: 1.3em; height: 15em; margin-right: 1.1em; margin-top: 1em; overflow: hidden; } -.scrolling-text h4 { margin: 0px; padding: 0px; } -.scrolling-text > div { overflow: hidden; padding-bottom: 1em; } -.flag-list-container { margin-top: 0.5em; } -.flag-list .button { color: rgb(134, 134, 134); cursor: pointer; display: inline-block; font-size: 1.8em; padding: 0.4em; vertical-align: top; } -.flag-list .button { width: 12em; } -.flag-list .button:hover { background-color: rgb(68, 68, 68); } -.flag-list .button.focused, .flag-list .button.focused:hover { color: rgb(103, 103, 103); background-color: rgb(255, 255, 255); } -#flag-widget { font-weight: 300; } -.flag-video { color: rgb(103, 103, 103); font-size: 1.8em; font-weight: 300; padding-top: 1em; width: 47%; } -.flag-video .url { color: rgb(255, 255, 255); display: block; font-size: 1.6em; padding-top: 0.5em; } -.flag-example { display: inline-block; height: 57%; position: absolute; right: 18%; top: 9%; width: 23%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/flag.png) 0px 0px / contain no-repeat; } -.flag-claim .metadata { display: block; font-size: 1em; font-weight: 500; padding-top: 0.2em; white-space: normal; } -.flag-claim .url { color: rgb(134, 134, 134); display: block; font-weight: 300; } -.flag-claim { color: rgb(103, 103, 103); font-size: 1.6em; font-weight: 300; margin: 1em 0px 0px 2em; white-space: nowrap; } -.flag-claim .copyright-infringment { display: inline-block; white-space: normal; width: 50%; } -.flag-claim .privacy-invasion { display: inline-block; margin-left: 4%; vertical-align: top; white-space: normal; width: 40%; } -.flag-claim .email { color: rgb(134, 134, 134); } -.flag-claim .subtitle { font-size: 1.2em; font-weight: 500; } -.player-error-dialog.player-error { color: rgb(170, 170, 170); font-size: 1.8em; padding: 1em 0px 8em 0em; } -#dialog .scrollbar { height: 70%; margin-top: 5em; right: 5em; } -#dialog .scrollbar .handle { height: 5em; } -.paid-channel-info { font-size: 1.4em; padding-top: 1em; } -.paid-channel-info .channel-url { font-weight: bold; } -.status-dialog #dialog-wrapper { background-color: rgba(0, 0, 0, 0.498039); } -.status-dialog .icon { display: inline-block; height: 11em; vertical-align: middle; width: 25%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png) 50% 50% / contain no-repeat; } -.status-dialog .info { display: inline-block; padding-left: 0.5em; vertical-align: middle; width: 70%; } -.status-dialog .message { color: rgb(204, 204, 204); font-size: 2em; } -.status-dialog #dialog-view { padding-top: 7em; } -.dialog-focused #legend { bottom: 12%; display: block; } -#legend.legend-for-dialog-closed-captions { bottom: 6%; } -#dialog.confirm-cookies .dialog-contents .header .title { font-size: 3em; } -#dialog.confirm-cookies #dialog-view { color: rgb(170, 170, 170); font-size: 1.8em; height: 8em; padding-top: 0.9em; } -.single-pane-selector { padding-bottom: 1em; padding-top: 1em; white-space: nowrap; } -.single-pane-selector .list { display: inline-block; margin-right: 0.5em; padding-left: 0.5em; padding-right: 0.5em; vertical-align: top; width: 94%; } -.single-pane-selector .button .label { width: 90%; } -.single-pane-selector .check-button.previously-selected .icon-check { display: inline-block; } -.split-pane-selector { border-bottom-width: 0.1em; border-bottom-style: solid; border-bottom-color: rgba(255, 255, 255, 0.2); padding-bottom: 1em; padding-top: 1em; white-space: nowrap; } -.check-button .icon-check { display: none; font-family: youtube-icons; } -.single-pane-selector .labeled-value, .split-pane-selector .labeled-value { color: rgb(134, 134, 134); font-size: 1.4em; height: 2.8em; line-height: 1.5em; overflow: hidden; padding: 0px 1em; white-space: normal; } -.single-pane-selector .labeled-value .value, .split-pane-selector .labeled-value .value { color: rgb(102, 102, 102); display: block; font-size: 0.7em; line-height: 1.4em; } -.single-pane-selector .button, .split-pane-selector .button { color: rgb(134, 134, 134); cursor: pointer; font-size: 1.4em; height: 2.8em; line-height: 2.8em; overflow: hidden; padding: 0px 0.4em; white-space: normal; } -.single-pane-selector .button .label, .split-pane-selector .button .label { display: inline-block; line-height: 1.3em; vertical-align: middle; } -.single-pane-selector .subtitled-button, .split-pane-selector .subtitled-button { line-height: 1.5em; } -.single-pane-selector .button.no-model, .split-pane-selector .button.no-model { visibility: hidden; } -.split-pane-selector .list { display: inline-block; vertical-align: top; width: 47%; } -.split-pane-selector .list:first-child { border-right-width: 0.1em; border-right-style: solid; border-right-color: rgba(255, 255, 255, 0.2); margin-right: 0.5em; padding-right: 0.5em; } -.single-pane-selector .button:hover, .single-pane-selector .list:not(.focused) .button.selected, .split-pane-selector .button:hover, .split-pane-selector .list:not(.focused) .button.selected { color: rgb(255, 255, 255); background-color: rgb(68, 68, 68); } -.single-pane-selector .button.focused, .single-pane-selector .button.focused:hover, .split-pane-selector .button.focused, .split-pane-selector .button.focused:hover { color: black; background-color: rgb(255, 255, 255); } -.single-pane-selector .subtitled-button span.subtitle, .split-pane-selector .subtitled-button span.subtitle { color: rgb(102, 102, 102); display: block; font-size: 0.7em; line-height: 1.4em; } -.color-button .preview { border: 2px solid rgb(0, 0, 0); color: rgb(134, 134, 134); display: inline-block; height: 1em; margin: 0px 0.2em 0.2em; vertical-align: middle; width: 1em; } -.color-button .preview.rounded { border-radius: 50%; } -.preview.black { border: 1px solid rgb(255, 255, 255); background-color: rgb(0, 0, 0); } -.preview.red { background-color: rgb(255, 0, 0); } -.preview.magenta { background-color: rgb(255, 0, 255); } -.preview.blue { background-color: rgb(0, 0, 255); } -.preview.cyan { background-color: rgb(0, 255, 255); } -.preview.green { background-color: rgb(0, 255, 0); } -.preview.yellow { background-color: rgb(255, 255, 0); } -.preview.white { background-color: rgb(255, 255, 255); } -.debug-dialog { font-size: 0.9em; } -.debug-dialog span.label { font-weight: bold; } -#dialog.browse-sets .video-upload-dialog-contents { display: inline-block; font-size: 1.6em; margin: 1em 3% 0px; text-align: left; vertical-align: top; width: 55%; } -#dialog.browse-sets .modify-video .video-upload-dialog-contents { margin-top: 2em; text-align: center; } -.video-upload-status .video-url { color: rgb(39, 147, 230); } -.delete-video { padding-bottom: 6em; } -.modify-video .list .button { color: rgb(132, 132, 132); display: inline-block; height: 8em; margin-right: 1em; text-align: center; width: 8em; background-size: 60% 60%; background-position: 50% 20%; background-repeat: no-repeat; } -.modify-video .list .button.focused { color: rgb(40, 40, 40); background-color: rgb(255, 255, 255); } -.modify-video .list .button span { display: block; font-size: 1.2em; margin: 4.6em 0.5em 0.5em; overflow: hidden; white-space: nowrap; } -.modify-video .modify-edit-button { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png); } -.modify-video .modify-edit-button.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png); } -.modify-video .modify-delete-button { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png); } -.modify-video .modify-delete-button.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png); } -.delete-video-dialog .video-tile .details, .modify-video .video-tile .details { margin-top: -0.1em; } -.browse-sets #modify-list .button { height: 7.5em; margin-right: 0.9em; width: 7.5em; } -.browse-sets #modify-list .button span { font-size: 1.1em; margin-top: 5.2em; } -.delete-video-dialog { margin-bottom: 14em; } -.browse-sets .delete-video-dialog { margin-bottom: 1em; } -.video-processing, .video-upload-error { font-size: 1.5em; } -.video-upload-error .error-container { color: rgb(170, 170, 170); margin-top: 1em; } -#dialog .buttons .upload-terms, #dialog .buttons .upload-terms:hover { color: rgb(85, 85, 85); display: block; font-size: 0.6em; margin-left: 1.5em; text-align: left; background-color: rgb(0, 0, 0); } -.upload-progress { margin-bottom: 1em; width: 100%; } -.upload-progress-value { text-align: left; width: 100%; } -.upload-progress span { margin-left: -1em; position: relative; width: 4em; } -.upload-progress .upload-progress-bar { width: 100%; background-color: rgb(170, 170, 170); } -.upload-progress .upload-progress-bar .completed { height: 1em; background-color: rgb(39, 147, 230); } -.privacy-button { cursor: pointer; position: relative; background: 0.4em 50% / 1.5em no-repeat; } -.privacy-button .checkbox { height: 2em; left: 85%; position: absolute; top: 0px; width: 2em; background-size: 2em; background-position: 100% 50%; } -.privacy-button.checked .checkbox { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png); } -.privacy-button.focused.checked .checkbox { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png); } -.privacy-button .label .name { line-height: 1.5em; text-indent: 1.8em; background-size: 2em; background-position: 0px 0.5em; } -.privacy-button .description { font-size: 0.6em; line-height: 0.8em; padding-left: 2.9em; } -.privacy-button .name { font-size: 1em; line-height: 1.2em; padding-left: 1.7em; } -.private-state, .video-tile .private { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png); } -.private-state.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png); } -.public-state, .video-tile .public { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png); } -.public-state.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png); } -.unlisted-state, .video-tile .unlisted { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png); } -.unlisted-state.focused { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png); } -.video-tile .private, .video-tile .public, .video-tile .unlisted { min-height: 1.5em; min-width: 1.5em; padding-left: 1.5em; background-size: 1.5em; background-position: 0% 50%; background-repeat: no-repeat; } -.video-privacy .button, .video-overview .button { display: inline-block; height: 2em; line-height: 2em; margin: 0.1em 0px; overflow: hidden; padding: 0.1em 0.5em; vertical-align: top; white-space: nowrap; width: 65%; } -.video-privacy .button { width: 85%; } -.video-overview .button:first-child { width: 20%; } -.video-privacy .button.focused, .video-privacy .button:not(.disabled):hover, .video-overview .button.focused, .video-overview .button:not(.disabled):hover { color: rgb(103, 103, 103); background-color: rgb(255, 255, 255); } -#dialog.browse-sets .video-privacy .button:nth-child(2) { width: 11em; } -#dialog.browse-sets .video-uploads { margin: 3em 1em 2em; } -#dialog.browse-sets .video-uploads .carousel { overflow: hidden; } -#dialog.browse-sets .video-uploads .carousel .video-tile .details { text-align: left; } -.video-overview .title-button { line-height: 1em; white-space: normal; } -#dialog.browse-sets .video-overview .title-button .label { display: inline-block; line-height: 2em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 95%; } -.video-overview .channel-button { line-height: 2em; overflow: hidden; text-indent: 1.8em; text-overflow: ellipsis; background-size: 1.5em; background-position: 0.35em 50%; background-repeat: no-repeat; } -.video-uploads .carousel { height: 20em; position: relative; white-space: nowrap; } -.video-tile-container { display: inline-block; margin-top: 1.7em; text-align: right; width: 35%; } -.video-tile-container .video-tile { border: 0.1em solid rgba(255, 255, 255, 0.2); display: inline-block; height: 22em; position: static; text-align: left; width: 20em; } -.video-tile-container .video-tile .tile-top { height: 51%; } -.video-tile-container .video-tile .tile-bottom .details { height: inherit; } -.video-uploads .carousel .video-tile { height: 20em; width: 18em; } -.video-uploads .video-tile .decoration { top: 7em; } -.video-tile-container .video-tile .tile-bottom, .video-uploads .video-tile .tile-bottom { width: initial; } -.dialog.closed-captions #dialog-wrapper { margin-top: 5em; } -#dialog.closed-captions-language-only #dialog-wrapper { padding: 1.6em 26%; } -#dialog.closed-captions-language-only #options-list { display: none; } -#legend.legend-for-dialog-closedCaptionsDialog { bottom: 24%; } -#dialog.closed-captions-language-only ~ #legend { right: 29%; } -.simple-dialog { margin: 3em; font-size: 1.6em; } -.lang-ja_JP .connection-instructions .step1, .lang-ja_JP .connection-instructions .step2, .lang-ko_KR .connection-instructions .step1, .lang-ko_KR .connection-instructions .step2, .lang-zh_CN .connection-instructions .step1, .lang-zh_CN .connection-instructions .step2, .lang-zh_HK .connection-instructions .step1, .lang-zh_HK .connection-instructions .step2, .lang-zh_TW .connection-instructions .step1, .lang-zh_TW .connection-instructions .step2 { font-size: 0.8em; } -.lang-de_DE .action-tile .content .title, .lang-el_GR .action-tile .content .title, .lang-es_ES .action-tile .content .title, .lang-es_MX .action-tile .content .title, .lang-fr_FR .action-tile .content .title, .lang-fr_CA .action-tile .content .title, .lang-ko_KR .action-tile .content .title, .lang-nl_NL .action-tile .content .title, .lang-pl_PL .action-tile .content .title, .lang-pt_BR .action-tile .content .title, .lang-pt_PT .action-tile .content .title, .lang-ru_RU .action-tile .content .title, .lang-uk_UA .action-tile .content .title { font-size: 2em; } -.lang-it_IT .action-tile .content .title { font-size: 1.8em; } -.lang-es_ES .action-tile .improve-yt-tile .title, .lang-fr_CA .action-tile .history-tile .title, .lang-fr_FR .action-tile .history-tile .title, .lang-de_DE .action-tile .terms-tile .title, .lang-fr_CA .action-tile .terms-tile .title, .lang-fr_FR .action-tile .terms-tile .title { font-size: 1.7em; } -.lang-es_ES .action-tile .videoinfo-tile .title, .lang-es_MX .action-tile .videoinfo-tile .title, .lang-fr_CA .action-tile .videoinfo-tile .title, .lang-fr_FR .action-tile .videoinfo-tile .title, .lang-pt_BR .action-tile .videoinfo-tile .title { font-size: 1.5em; white-space: normal; } -.lang-de_DE .action-tile .videoinfo-tile .title { font-size: 1.45em; padding-left: 0.5em; padding-right: 0.5em; white-space: normal; } -.lang-es_ES .action-tile .videoinfo-tile .label, .lang-es_MX .action-tile .videoinfo-tile .label, .lang-fr_CA .action-tile .videoinfo-tile .label, .lang-fr_FR .action-tile .videoinfo-tile .label, .lang-pt_BR .action-tile .videoinfo-tile .label { padding-top: 0.6em; } -.lang-de_DE .action-tile .videoinfo-tile .label { font-size: 1.6em; padding-top: 0.7em; } -.lang-ja_JP .action-tile .terms-tile .title { font-size: 2em; } -.lang-ja_JP #transliteration .list { font-size: 1.2em; } -.lang-ja_JP #keyboard-grid { font-size: 1.5em; } -.lang-ja_JP #keyboard-spacebar { margin-left: 5.5em; } -.lang-zh_CN #search .horizontal-list, .lang-zh_HK #search .horizontal-list, .lang-zh_TW #search .horizontal-list, .lang-ja_JP #search .horizontal-list { transform: translateY(9.5em); } -.lang-ko_KR #search .horizontal-list { transform: translateY(10.5em); } -.lang-ko_KR #search-keyboard { font-size: 1.82em; } -.lang-ko_KR #letter-suggest .button { width: 1em; } -.lang-ko_KR #keyboard-grid, .lang-ru_RU #keyboard-grid, .lang-uk_UA #keyboard-grid { margin-top: 0.3em; } -.lang-ko_KR #keyboard-grid.lang-ko .numbers-toggle-tile.button, .lang-ru_RU #keyboard-grid.lang-ru .numbers-toggle-tile.button, .lang-uk_UA #keyboard-grid.lang-ua .numbers-toggle-tile.button { font-size: 0.75em; } -.lang-ko_KR #keyboard-grid .button, .lang-ru_RU #keyboard-grid .button, .lang-uk_UA #keyboard-grid .button { height: 1.2em; line-height: 1.1em; margin-top: 0.6em; } -.lang-ko_KR #letter-suggest .button, .lang-ru_RU #letter-suggest .button, .lang-uk_UA #letter-suggest .button { height: 1.2em; line-height: 1.1em; width: 1.2em; } -.lang-ko_KR .search-state #spinner, .lang-ru_RU .search-state #spinner, .lang-uk_UA .search-state #spinner, .lang-ja_JP .search-state #spinner { top: 25em; } -.lang-ko_KR .search-state .application-message, .lang-ru_RU .search-state .application-message, .lang-uk_UA .search-state .application-message, .lang-ja_JP .search-state .application-message { top: 55%; } -.lang-ru_RU #keyboard-grid.lang-ru .button, .lang-uk_UA #keyboard-grid.lang-ua .button, .lang-ko_KR #keyboard-grid, .lang-ko_KR #letter-suggest, .lang-ko_KR #keyboard-spacebar { font-size: 1em; } -.lang-ru_RU #keyboard-spacebar, .lang-uk_UA #keyboard-spacebar { margin-left: 4.2em; } -.lang-de_DE .countdown-ad-callout .time-left-label, .lang-de_DE .countdown-ad-callout .skip-time-label { font-size: 1.1em; } -.lang-cs_CZ .action-tile .description, .lang-de_DE .action-tile .description, .lang-hi_IN .action-tile .description, .lang-pl_PL .action-tile .description, .lang-pt_BR .action-tile .description, .lang-pt_PT .action-tile .description, .lang-ru_RU .action-tile .description, .lang-uk_UA .action-tile .description { font-size: 1.3em; } -.lang-de_DE .guide-button.footer .guide-button-title { width: 27.81em; } -.lang-de_DE .guide-user-name { width: 13.5em; } -.lang-nl_NL .guide-button.disabled .guide-button-title, .lang-de_DE .guide-button.disabled .guide-button-title, .lang-fr_FR .guide-button.disabled .guide-button-title, .lang-pt_PT .guide-button.disabled .guide-button-title { width: 13em; } -.lang-tr_TR #search #keyboard-grid .button.clear-query-tile, .lang-tr_TR .action-tile .title, .lang-tr_TR .guide-button-icon, .lang-tr_TR #keyboard-grid .button, .lang-tr_TR .tile-top .badge, .lang-tr_TR .tile-top .duration, .lang-tr_TR .title-card .badges span .lang-tr_TR.lang-case-sensitive .player-controls .button span::first-letter, .lang-tr_TR.lang-case-sensitive .player-controls .toggle-button span::first-letter, .lang-tr_TR.lang-case-sensitive .snap-controls .speakable span::first-letter, .lang-tr_TR.lang-case-sensitive .voice-command::first-letter { text-transform: none; } -.voice-command { display: none; } -.lang-case-sensitive .voice-command::first-letter { text-transform: uppercase; } -.engaged .voice-command { color: rgb(93, 194, 30); display: block; font-size: 1em; background-color: rgba(22, 22, 22, 0.701961); } -.engaged .horizontal-list .carousel .voice-command { display: none; } -.engaged .horizontal-list.focused .carousel .voice-command { display: block; } -.engaged .pivot-video-tile .voice-command, .engaged .pivot-channel-tile .voice-command { display: none; } -.engaged .pivot-video-tile.speakable .voice-command, .engaged .pivot-channel-tile.speakable .voice-command { display: block; } -.engaged .video-tile .voice-command, .engaged .pivot-video-tile .voice-command, .engaged .pivot-channel-tile .voice-command, .engaged .playlist-tile .voice-command, .engaged .channel-tile .voice-command { bottom: 50%; font-size: 1.5em; margin-top: -2.17em; padding: 0.5em 0.9em; opacity: 0.999; } -.engaged .video-tile.disabled .voice-command, .engaged .pivot-video-tile.disabled .voice-command, .engaged .pivot-channel-tile.disabled .voice-command { display: none; } -.engagement-indicator { bottom: 0.8em; display: none; font-size: 1.5em; left: 1.8em; position: absolute; width: 16em; } -.engaged .engagement-indicator { color: rgb(93, 194, 30); display: block; background-color: transparent; } -.engagement-indicator .icon { display: inline-block; height: 2em; vertical-align: middle; width: 2em; background: 50% 50% no-repeat; } -.engagement-indicator .stop-listening { padding: 0.5em; } -.engagement-indicator .stop-listening .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png); } -.engagement-indicator .text { text-align: center; } -.engagement-indicator .title { display: inline-block; font-size: 0.9em; } -.browse-sets-state.engaged .engagement-indicator, .browse-state.engaged .engagement-indicator, .post-play-state.engaged .engagement-indicator, .post-play-state.engaged .engagement-indicator, .settings-state.engaged .engagement-indicator, .search-state.engaged .engagement-indicator { display: block; } -.watch-state.engaged .engagement-indicator { display: block; height: 3em; left: 0px; margin-left: auto; margin-right: auto; right: 0px; text-align: center; top: 20%; } -.watch-focused .engagement-indicator .stop-listening { background-color: rgba(22, 22, 22, 0.701961); } -.sliding-highlighter .select, .engaged .legend-item, .engaged #dialog .speakable.button, .engaged .context-menu .speakable.button, .engaged .speakable.action-tile .title, .engaged .modify-video .speakable, .engaged .modify-video .speakable.focused { color: rgb(93, 194, 30); } -.voice-footer { bottom: 0px; color: rgb(93, 194, 30); font-size: 1.5em; height: 3em; padding: 1em 0px 0.6em; position: absolute; text-align: center; width: 100%; background-color: rgba(22, 22, 22, 0.701961); } -.voice-footer .list { font-size: 0.65em; margin: -1.3em auto auto; padding-top: 1em; width: 29em; } -.voice-footer .component { display: inline-block; padding-right: 1em; } -.engaged .voice-footer { color: rgb(93, 194, 30); } -.engaged .voice-footer li { display: inline; padding: 0px 2%; } -.engaged .player-controls .button span, .engaged .player-controls .toggle-button span { color: rgb(93, 194, 30); display: block; } -.engaged .player-controls .button.disabled span, .engaged .player-controls .toggle-button.disabled span { display: none; } -.engaged #transport-controls.ad-active .player-controls #button-list div.skip-ad-button.canskip .label, .engaged .skip-ad-button.canskip .label { color: rgb(93, 194, 30); } -.engaged .player-controls-widget { margin-top: 7.4em; } -.engaged .player-controls .voice-command.transport { top: 1em; } -.legend { bottom: 5.5%; color: rgb(241, 241, 241); position: absolute; right: 5.5%; text-shadow: rgb(0, 0, 0) 2px 2px 4px; display: none; background: radial-gradient(closest-side, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.0980392) 60%, rgba(0, 0, 0, 0)); } -.limited-memory .legend { background: none; } -.legend-item { cursor: pointer; display: none; margin: 0px 0px 0px 0.5em; } -.legend-item span { vertical-align: middle; } -.legend-item .icon { display: block; height: 2.5em; margin: auto; max-width: 100%; text-align: center; width: 2.5em; background-size: 100%; } -.legend-item.more > .icon.icon-player-more { background-size: 0px; } -.legend-item.more > .icon::before { font-family: youtube-icons; color: rgb(255, 255, 255); font-size: 1.9em; margin: auto; position: relative; top: 0.2em; } -.legend-item .title { display: block; font-size: 1.1em; margin-top: 0px; text-align: center; text-transform: none; } -#legend.back .back, #legend.close-guide .close-guide, #legend.delete .delete, #legend.exit .exit, #legend.guide .guide, #legend.search .search, #legend.space .space, #legend.home .home, #legend.modify .modify, #legend.more .more, .reversed-keys #legend.back .reversed-back { display: inline-block; } -.reversed-keys #legend.back .back { display: none; } -.desktop .legend, .game-console .legend, .tv .legend { display: inline-block; } -.veryvibrant .legend { font-size: 1.2em; } -.desktop .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png); } -.game-console.sony .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png); } -.rockandroll #legend .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png); } -.skip-ad-callout .icon, .tv .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png); } -.veryvibrant .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png); } -.veryvibrant #user-info-background { transform: translateZ(0px); } -.veryvibrant #search .horizontal-list { top: 30%; transform: none; } -.veryvibrant .search-state #spinner { top: 20em; } -.sellingApples .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png); } -.nothingHere .legend-item .icon { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png); } -.desktop .legend-item.back .icon, .desktop .legend-item.exit .icon { background-size: 240%; background-position: 0px 47.4%; } -.desktop .legend-item.search .icon { background-size: 240%; background-position: 0px 100%; } -.desktop .legend-item.close-guide .icon, .desktop .legend-item.guide .icon, .desktop .legend-item.home .icon, .desktop .legend-item.space .icon { background-size: 240%; background-position: 0px 73.7%; } -.desktop .skip-ad-callout .icon { width: 6.6em; background-size: 520%; background-position: 31% 67.5%; } -.game-console.sony .legend-item .icon, .tv .legend-item .icon, .veryvibrant .legend-item .icon { height: 1.5em; position: relative; bottom: 0.5em; width: 1.5em; background-repeat: no-repeat; } -.game-console.sony .legend-item.more > .icon::before, .tv .legend-item.more > .icon::before, .veryvibrant .legend-item.more > .icon::before { top: initial; } -.game-console.microsoft .legend-item { margin-left: 1.4em; } -.game-console.microsoft .legend-item.back .icon, .game-console.microsoft .legend-item.exit .icon, .game-console.microsoft .legend-item.reversed-back .icon { background-position: 0px 27.5%; } -.game-console.microsoft .legend-item.search .icon, .game-console.microsoft .legend-item.space .icon { background-position: 0px 82%; } -.game-console.microsoft .legend-item.close-guide .icon, .game-console.microsoft .legend-item.delete .icon, .game-console.microsoft .legend-item.guide .icon, .game-console.microsoft .legend-item.home .icon, .game-console.microsoft .legend-item.modify .icon { background-position: 0px 54.9%; } -.rockandroll #legend .legend-item.back .icon, .rockandroll #legend .legend-item.exit .icon { background-position: 0px 105%; } -.game-console.sony .legend-item.back .icon, .game-console.sony .legend-item.exit .icon { background-position: 0px 0%; } -.game-console.sony .legend-item.reversed-back .icon { background-position: 0px 100%; } -.game-console.sony .legend-item.search .icon, .game-console.sony .legend-item.space .icon { background-position: 0px 87.5%; } -.game-console.sony .legend-item.close-guide .icon, .game-console.sony .legend-item.delete .icon, .game-console.sony .legend-item.guide .icon, .game-console.sony .legend-item.home .icon { background-position: 0px 75%; } -.game-console.sony #dialog .logout-authenticated-info, .game-console.microsoft #dialog .logout-authenticated-info { padding-top: 0px; } -.game-console.sony .action-tile .platform-container, .game-console.microsoft .action-tile .platform-container { margin: 1em; text-align: center; } -.game-console.sony .login-user-info .platform-user-name, .game-console.sony .platform-user-name, .game-console.microsoft .login-user-info .platform-user-name, .game-console.microsoft .platform-user-name { vertical-align: middle; } -.game-console.sony .login-user-info .platform-user-icon, .game-console.sony .platform-user-icon, .game-console.microsoft .platform-user-icon, .game-console.microsoft .login-user-info .platform-user-icon { display: inline-block; height: 3em; vertical-align: middle; width: 3em; background-size: cover; } -.game-console.sony #dialog .login-user-info .platform-container > div, .game-console.microsoft #dialog .login-user-info .platform-container > div { font-size: 1em; } -.veryvibrant .advertisement-callout, .veryvibrant .advertisement-info, .veryvibrant #leanback-player-container, .veryvibrant .skip-ad-button, .veryvibrant .title-card, .veryvibrant #watch, .veryvibrant .toaster { } -.veryvibrant .pivot-shelf-list { opacity: 1; } -.veryvibrant .legend-item.back .icon, .veryvibrant .legend-item.exit .icon { background-position: 0px 33.3%; } -.veryvibrant .legend-item.search .icon { background-position: 0px 100%; } -.veryvibrant .legend-item.close-guide .icon, .veryvibrant .legend-item.delete .icon, .veryvibrant .legend-item.guide .icon, .veryvibrant .legend-item.home .icon { background-position: 0px 66.7%; } -.veryvibrant .qr-code-wrapper { display: none; } -.veryvibrant #search .search-pairing { display: none; } -.veryvibrant #search-suggestions { font-size: 1.6em; height: 1.6em; } -.veryvibrant .search-state .application-message { top: 35%; } -.tv .legend-item.guide .icon, .tv .legend-item.close-guide .icon, .tv .skip-ad-callout .icon { background-position: 0px 100%; } -.lg .legend-item.back, .lg .legend-item.exit { cursor: pointer; } -.tv .legend-item.back .icon, .tv .legend-item.exit .icon { background-position: 0% 0%; } -.lg .legend-item.back .icon, .lg .legend-item.exit .icon { opacity: 0.8; } -.lg .legend-item.back:hover .icon, .lg .legend-item.exit:hover .icon { opacity: 1; } -body.samsung { background-color: transparent !important; } -body.lg { background-image: url(tv:) !important; background-color: transparent !important; } -body.limited-memory { background-color: rgb(17, 17, 17); } -.limited-memory .bg, .eureka .bg { background-image: none; background-color: rgb(46, 46, 46); } -.limited-animation .loading-indicator, .opera .loading-indicator, .lg .loading-indicator { display: none; } -.limited-animation .fallback-loading-indicator, .opera .fallback-loading-indicator, .lg .fallback-loading-indicator { display: block; } -.limited-animation .video-tile .video-thumb { opacity: 1; } -.limited-memory .video-tile .video-thumb { background-size: cover; } -.limited-memory .video-tile .video-thumb.preloaded { background-size: auto; } -.rockandroll.limited-memory .video-tile .video-thumb { opacity: 1; background-size: 100%; } -.limited-animation.playlist-tile .count-overlay { background-color: rgb(0, 0, 0); } -.search .placeholder-tile, .settings .placeholder-tile, .limited-animation .browse-content .list .placeholder-tile { height: 24em; width: 20.75em; } -.guide .placeholder-tile { width: 100%; height: 2em; } -.limited-animation .action-tile, .limited-animation .channel-tile, .limited-animation .playlist-tile, .limited-animation .auto-play-tile, .limited-animation .recent-search-tile, .limited-animation .video-tile, .limited-animation .browse-content .list .placeholder-tile, .search .placeholder-tile, .settings .placeholder-tile, .shelf .placeholder-tile { display: inline-block; margin-right: 1.1em; position: relative; vertical-align: top; } -.limited-animation .shelves { margin-top: 2.5%; } -.limited-animation .playlist-tile .overlay, .limited-animation .video-tile .overlay, .limited-memory .playlist-tile .overlay, .limited-memory .video-tile .overlay { opacity: 1; } -.limited-memory .auto-play-tile .video-tile { margin: 0px; } -.limited-animation .auto-play-tile .post-play-countdown { top: -4em; } -.limited-animation .hide-background.video-tile .video-thumb { opacity: 1; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png) !important; background-repeat: no-repeat; } -.limited-animation .action-tile.focused .content { text-shadow: none; } -.limited-animation .post-play-countdown { text-shadow: none; } -.limited-animation #keyboard-grid .button.disabled, .limited-animation #keyboard-grid .button.focused, .limited-animation #letter-suggest .button { background-color: rgb(153, 153, 153); } -.limited-animation #search #text-box-background, .limited-animation #search #search-text-entry { background-color: rgb(0, 0, 0); } -.limited-animation #search-keyboard, .limited-animation #letter-suggest { text-shadow: none; } -.limited-animation #search-keyboard .disabled, .limited-animation #letter-suggest .button { color: rgb(0, 0, 0); text-shadow: none; } -.limited-animation #letter-suggest .button.focused, .limited-animation #search-keyboard .button.focused { color: rgb(33, 33, 33); background-color: rgb(225, 225, 225); } -.limited-animation #transliteration .list .button { border-right-color: rgb(241, 241, 241); } -.limited-animation #transliteration .list .button.focused { background-color: rgb(153, 153, 153); } -.limited-animation .toaster .toast-container { background-color: rgb(27, 25, 26); } -.limited-animation .title-card, .limited-memory.limited-animation.sets-ui .title-card { height: 20%; background: rgb(0, 0, 0); } -.opera .focused, .opera :focus { outline: invert none medium; } -.eureka #browse-sets, .eureka #dialog .buttons, .eureka .legend, .eureka #transport-controls { display: none; } -#eureka-player-controls-container { display: none; position: absolute; top: 17em; width: 100%; } -.eureka #eureka-player-controls-container { display: block; } -.eureka .loading #eureka-player-controls-container { opacity: 0; } -#eureka-player-controls { border-radius: 1em; height: 11.5em; margin: 0px auto; overflow: hidden; width: 11.5em; background-size: 100%; } -.eureka #eureka-player-controls { opacity: 0; } -@-webkit-keyframes showAndShrinkPause { - 0% { transform: scale(1.5); opacity: 0; } - 100% { opacity: 0.7; } -} -@-webkit-keyframes hideAndGrowPlay { - 0% { opacity: 0.7; } - 100% { transform: scale(1.5); opacity: 0; } -} -.eureka #watch.play #eureka-player-controls { animation: hideAndGrowPlay 0.25s linear 0s 1 normal none; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png); } -.eureka #watch.pause #eureka-player-controls { animation: showAndShrinkPause 0.25s linear 0s 1 normal none; opacity: 0.7; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png); } -.sellingApples .action-tile, .sellingApples .legend-item.back, .sellingApples .legend-item.delete, .sellingApples .legend-item.exit, .sellingApples .legend-item.home, .sellingApples .legend-item.modify, .sellingApples .legend-item.reversed-back, .sellingApples .legend-item.search, .sellingApples .player-controls div, .sellingApples .auto-play-tile, .sellingApples .video-stream, .sellingApples .video-tile, .sellingApples #browse-search-bar, .sellingApples #guide.focused .guide-button, .sellingApples #player-controls .item, .sellingApples #snap-buttons > div { } -.sellingApples #browse-sets { } -.sellingApples #guide.focused .carousel { } -.sellingApples .settings-shelf { } -.sellingApples #transliteration .button:hover, .sellingApples #keyboard-grid .button:hover { cursor: default; background: none; } -.search-hint { display: none; } -.sellingApples .search-hint, .nothingHere .search-hint { color: rgb(107, 107, 107); display: block; font-size: 1.4em; line-height: 2em; } -.context-menu-defocuser { height: 100%; left: 0px; position: absolute; top: 0px; width: 100%; background-color: rgba(0, 0, 0, 0.498039); } -.context-menu-list { height: initial; left: 50%; padding-top: 2.5em; position: relative; top: 50%; transform: translate(-50%, -50%); width: 30%; background-color: rgb(0, 0, 0); } -.context-menu-list .button { border-color: rgb(0, 0, 0); border-style: solid; border-width: 0.5em 1em; color: rgb(225, 225, 225); cursor: pointer; font-family: roboto-regular; font-size: 1.5em; height: auto; line-height: 2.5em; margin: 0px; text-align: left; text-indent: 1em; transition-duration: 200ms; transition-property: background-color, color; transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); } -.context-menu-list .button::before { font-family: youtube-icons; padding-right: 1em; } -.context-menu-list .button.icon-platform-switch-users { border-style: solid; border-color: rgb(31, 31, 31); border-width: 2em 1em; height: initial; line-height: initial; margin-top: 1em; padding: 0.5em 0px 0.5em 3em; text-indent: 0px; background: url(www.youtube.com/s/tv/html5/f0d770f4/app-prod.css) 0.5em 50% / 2em 2em no-repeat rgb(31, 31, 31); } -.context-menu-list .button.focused { color: rgb(0, 0, 0); background-color: rgb(225, 225, 225); } -.call-to-cast { display: none; } -.call-to-cast.focused { bottom: 0px; display: block; left: 0px; position: absolute; right: 0px; top: 0px; } -.call-to-cast-text { color: rgb(241, 241, 241); font-weight: normal; text-shadow: rgb(0, 0, 0) 0.06em 0.06em; width: 38%; } -h2.call-to-cast-text { font-size: 3.2em; margin-bottom: 0.3em; margin-top: 0px; padding-top: 1.5em; } -h3.call-to-cast-text { font-size: 1.7em; } -.call-to-cast .end-screen { display: none; height: 100%; background-size: cover; background-position: 50% 50%; background-repeat: no-repeat; } -.call-to-cast .end-screen.active { display: block; } -.call-to-cast .end-screen .call-to-cast-text { color: rgb(255, 255, 255); width: 40%; } -.call-to-cast .end-screen .call-to-cast-text em { color: rgb(0, 144, 255); font-style: normal; } -.call-to-cast .end-screen h2.call-to-cast-text { margin-bottom: 0.5em; padding-top: 2em; } -.call-to-cast .end-screen h3.call-to-cast-text { line-height: 1.5em; } -.call-to-cast .end-screen.left .call-to-cast-text { margin-left: 5%; } -.call-to-cast .end-screen.right .call-to-cast-text { margin-left: 50%; } -.call-to-cast .end-screen .yt-logo, .call-to-cast .end-screen .yt-kids-logo { bottom: 8%; height: 13.88%; position: fixed; width: 100%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png); background-size: contain; background-repeat: no-repeat; } -.call-to-cast .end-screen.left .yt-logo, .call-to-cast .end-screen.left .yt-kids-logo { left: 4%; background-position: 0% 50%; } -.call-to-cast .end-screen.right .yt-logo, .call-to-cast .end-screen.right .yt-kids-logo { right: 4%; background-position: 100% 50%; } -.call-to-cast .end-screen .yt-kids-logo { height: 20%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png); } -.call-to-cast .end-screen.multi-user { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg); } -.call-to-cast .end-screen.yt-mix { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg); } -.call-to-cast .end-screen.tv-queue { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg); } -.call-to-cast .end-screen.kids-promo { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg); } -.call-to-cast .end-screen.kids-mother-goose { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg); } -.call-to-cast .end-screen.kids-rainbow { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg); } -.call-to-cast .end-screen.kids-sesame { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg); } -.call-to-cast .end-screen.kids-talking-tom { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg); } -.call-to-cast .end-screen.kids-wonderquest { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg); } -.call-to-cast .THEME-cl.end-screen.kids-promo h2.call-to-cast-text { width: 80%; } -.call-to-cast .THEME-k.end-screen h3.call-to-cast-text { font-size: 3em; line-height: 1.4em; margin-top: 0px; padding-top: 10%; padding-left: 5%; width: 45%; } -.call-to-cast .end-screen.gaming-heart { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg); } -.call-to-cast .THEME-g.end-screen h3.call-to-cast-text { font-size: 2.2em; padding-top: 0%; width: 100%; } -.call-to-cast .end-screen.loki { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg); } -.call-to-cast .THEME-up.end-screen h3.call-to-cast-text { font-size: 2.2em; margin-left: 0%; padding-top: 17em; text-align: center; width: 100%; } -.call-to-cast .THEME-m.end-screen h2.call-to-cast-text { font-size: 2.2em; margin-bottom: 0px; text-align: center; width: 100%; } -.call-to-cast .THEME-m.end-screen h3.call-to-cast-text { margin-top: 0px; text-align: center; width: 100%; } -.call-to-cast .THEME-m.end-screen.music-ready { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg); } -.call-to-cast .THEME-m.end-screen.music-ready .call-to-cast-logo { height: 60%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png) 50% 100% no-repeat; } -.call-to-cast .THEME-m.end-screen.music-ready h2.call-to-cast-text { padding-top: 10%; } -.call-to-cast .THEME-m.end-screen.music-party { height: 100%; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg); } -.call-to-cast .THEME-m.end-screen.music-party .call-to-cast-logo { height: 55%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png) 50% 100% no-repeat; } -.call-to-cast .THEME-m.end-screen.music-party .footer { height: 10%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png) 50% 0% no-repeat; } -.snap-controls { height: 90%; padding: 0.5em; position: relative; } -.snapped.blurred #snap-buttons, .snapped.blurred #unsupported-mode, .snapped.blurred #ad-callout, .snapped.blurred .logo-container, .snapped.blurred .title-card, .snapped.blurred .up-next { opacity: 0.25 !important; } -.snapped #dialog, .snapped #guide, .snapped #search, .snapped #settings, .snapped #title-tray, .snapped #transport-controls, .snapped .ad-showing .video-ads, .snapped .advertisement-info, .snapped .application-message, .snapped .browse, .snapped .browse-sets, .snapped .caption-window, .snapped .countdown-ad-callout, .snapped .html5-video-info-panel, .snapped .legend, .snapped .player-video-avatar, .snapped .quality-status, .snapped .skip-ad-button, .snapped .skip-ad-callout, .snapped .toaster, .snapped.blurred.browse-sets-state .title-card, .snapped.blurred.search-state .title-card, .snapped.blurred.settings-state .title-card, .snapped.dialog-focused #snap-progress-bar, .snapped.dialog-focused #watch { display: none !important; } -.snapped .advertisement-tooltip { color: rgb(160, 160, 160); font-size: 0.4em; left: 0px; top: 0px; } -.snapped .advertisement-tooltip .remaining_duration { color: rgb(113, 113, 113); } -.snapped #ad-callout { left: 5%; top: 18%; } -.snapped .debug-watermark { font-size: 0.2em; width: 100%; } -#app-markup.snapped { background-color: rgb(35, 31, 32); } -.snapped #background { display: none; } -.snapped { font-size: 2em; } -.snapped.watch-state .logo-container { opacity: inherit; } -.snapped .icon-youtube-logo::before { content: ""; } -.snap-controls .logo-container { display: inherit; height: 2.5em; left: 0px; position: absolute; right: 0px; top: 5%; background: url(www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png) 50% 0% no-repeat; } -.snapped .ad-video, .snapped .ad-created .video-stream { height: 270px !important; width: 480px !important; } -.snapped .video-stream, .snapped .html5-video-content { max-height: 5.6em; transform: scale(0.9) !important; top: 4.4em !important; } -.snapped .html5-video-controls { top: 9.8em !important; } -.snapped .player-video-title { color: rgb(160, 160, 160); font-size: 0.7em; line-height: 1.1em; margin: 0px; max-height: 2.2em; white-space: normal; width: 12em; } -.snapped .player-meta { left: 0px; margin: 0px; position: inherit; top: 0px; } -.snapped .player-meta .player-video-text { padding-left: 0px; } -.snapped .player-meta .player-video-details { color: rgb(113, 113, 113); font-size: 0.5em; line-height: 1.1em; } -.snapped .player-meta .player-video-details > div { margin-left: 0px; } -.snapped .player-video-details .uploaded-date, .snapped .player-video-details .set-context, .snapped .player-video-details .view-count { font-size: 0.9em; margin-top: 0px; } -.watch-state.snapped #snap-progress-bar { display: block; } -#snap-progress-bar { display: none; height: 0.1em; left: 0px; margin-top: 9.25em; padding: 0px; position: relative; top: 0px; width: 100%; background-position: 0% 0%; } -#snap-progress-bar .progress-bar-disc, #snap-progress-bar .progress-bar-playhead { display: none; } -#snap-progress-bar div { height: 5px; top: 0px; } -.snapped .title-card { border: none; height: initial; padding-top: 0.3em; position: inherit; background: none; } -#unsupported-mode { color: rgb(255, 255, 255); font-size: 0.9em; line-height: 1.2em; padding: 80% 1em 0px; width: 8em; } -.snapped .loading-indicator { height: 5em; width: 5em; } -.snapped #spinner { top: 19%; transform: scale(0.5); } -.engaged.snapped .engagement-indicator { display: inline-block; left: 0px; margin-left: auto; margin-right: auto; position: absolute; right: 0px; text-align: center; font-size: 0.6em !important; top: 4.2em !important; } -.engaged.snapped .engagement-indicator .stop-listening { background: transparent; } -.snap-controls #snap-buttons { bottom: 0px; position: absolute; } -.snap-controls #snap-buttons .focused, .snap-controls #snap-buttons :hover { border-radius: 0.15em; color: rgb(0, 0, 0); background-color: rgb(255, 255, 255); } -.snap-controls #snap-buttons .button, .snap-controls #snap-buttons .toggle-button { display: inline-block; font-size: 0.8em; height: 1em; margin-left: 0.5em; padding: 1em; position: relative; text-align: center; top: 0px; width: 1em; } -.snap-controls #snap-buttons div { color: rgb(255, 255, 255); cursor: pointer; vertical-align: middle; } -.snap-controls #snap-buttons div.disabled:hover { color: rgb(255, 255, 255); background-color: transparent; } -.snap-controls #snap-buttons div.focused { opacity: 1; } -.snap-controls #snap-buttons div.disabled { opacity: 0.2; } -.snap-controls .speakable span, .snap-controls .disabled span { display: none; } -.engaged .snap-controls .speakable:not(.disabled) span { color: rgb(93, 194, 30); display: block; font-size: 0.6em; left: 0px; overflow: hidden; pointer-events: none; position: absolute; text-align: center; top: -1.5em; width: 100%; word-break: break-all; } -.lang-case-sensitive .snap-controls .speakable span::first-letter { text-transform: uppercase; } -.snap-controls .icon-player-play { font-family: youtube-icons; } -.snap-controls .icon-mute, .snap-controls .icon-fullscreen { background-size: 3em; background-position: 50% 50%; background-repeat: no-repeat; } -.snap-controls .icon-mute, .snap-controls .icon-mute.disabled { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png); } -.snap-controls .icon-mute.focused, .snap-controls .icon-mute:hover:not(.disabled) { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png); } -.snap-controls .icon-mute.toggle-selected { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png); } -.snap-controls .icon-mute.toggle-selected.focused, .snap-controls .icon-mute.toggle-selected:hover { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png); } -.snap-controls .icon-fullscreen { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png); } -.snap-controls .icon-fullscreen.focused, .snap-controls .icon-fullscreen:hover { background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png); } -.up-next { height: 3em; padding-top: 1em; } -.up-next div { color: rgb(160, 160, 160); font-size: 0.6em; } -.up-next .video-title { height: 1.2em; line-height: 1.2em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; width: 100%; } -.up-next .video-thumb { display: inline-block; height: 100%; margin-top: 0.2em; max-height: 2.5em; vertical-align: top; width: 5em; background: 50% 50% / 100% no-repeat; } -#browse-sets { height: 100%; left: 0px; overflow: hidden; position: absolute; right: 0px; background-color: rgb(34, 34, 34); } -#browse-sets.no-background, .limited-memory #browse-sets { background-color: rgba(0, 0, 0, 0); } -#browse-search-bar { cursor: pointer; height: 3em; left: 8em; margin-right: 18em; position: absolute; right: 2.5em; top: 2.5em; background-color: rgba(153, 153, 153, 0.2); } -.limited-animation #browse-search-bar { background-color: rgb(79, 87, 90); } -#browse-search-bar.focused, #browse-search-bar:hover { background: rgb(255, 255, 255); } -#browse-search-bar .icon { color: rgba(255, 255, 255, 0.4); display: block; font-family: youtube-icons; font-size: 1.8em; margin: 0px; padding: 0.35em 0px 0px 0.5em; text-align: left; } -.limited-animation #browse-search-bar .icon { color: rgb(225, 225, 225); } -.youtube-logo-top { height: 3.4em; position: absolute; right: 9.5em; top: 2.3em; width: 8.4em; font-family: youtube-icons; } -#browse-sets.has-header-content .youtube-logo-top { display: none; } -.youtube-logo::before { color: rgba(153, 153, 153, 0.498039); display: block; font-size: 3.4em; } -.youtube-unlimited-logo::before { color: rgba(153, 153, 153, 0.498039); display: none; font-size: 3.4em; position: relative; right: 0.5em; } -.unlimited .youtube-logo::before { display: none; } -.unlimited .youtube-unlimited-logo::before { display: block; } -.limited-animation .youtube-unlimited-logo::before, .limited-animation .youtube-logo::before { color: rgb(79, 87, 90); } -#browse-search-bar.focused .icon, #browse-search-bar:hover .icon { color: rgb(68, 68, 68); } -#platform-user-icon { height: 4em; position: absolute; right: 3em; top: 2em; width: 4em; background-size: contain; background-position: 50% 50%; background-repeat: no-repeat; } -#browse-header { height: 60%; position: relative; background-size: cover; background-position: 0px -8em; } -.limited-memory.limited-animation #browse-header { background-size: contain; background-position: 6em 0px; background-repeat: no-repeat; } -.no-background #browse-header { background-image: none !important; } -.browse-sets #browse-header.collapsed { transform: translateY(-27%); } -.limited-memory .browse-sets #browse-header.collapsed { top: -7em; transform: none; } -#browse-header .title { color: rgb(225, 225, 225); display: inline-block; font-size: 2.25em; margin-bottom: -0.23em; overflow: hidden; text-overflow: ellipsis; transform-origin: left 50% 0px; white-space: nowrap; width: 23.7em; } -#browse-header.one-button .title { width: 18.7em; } -#browse-header.two-buttons .title { width: 14em; } -#browse-header.collapsed .title { overflow: visible; transform: scale(0.8, 0.8) translateY(-5em) translateX(-1.5em); } -.browse-header-gradient { height: 100%; width: 100%; background: linear-gradient(rgba(34, 34, 34, 0) 0%, rgba(34, 34, 34, 0) 15%, rgb(34, 34, 34) 100%); } -.limited-memory .browse-header-gradient { display: none; } -.no-background .browse-header-gradient { visibility: hidden; } -.browse-header-metadata { left: 8em; position: absolute; transform: translateZ(0px); } -.limited-memory.limited-animation .browse-header-metadata { top: 11.6em; } -.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata { font-size: inherit; left: 8em; top: 11em; } -.limited-memory.limited-animation #browse-header.collapsed .browse-header-metadata .browse-header-avatar { height: 4em; margin-right: 1em; width: 4em; } -.browse-header-avatar { display: inline-block; height: 5em; margin-right: 1.3em; transform-origin: left 50% 0px; width: 5em; background-size: contain; } -#browse-header.collapsed .browse-header-avatar { transform: scale(0.61, 0.61) translateY(-13.5em); } -#browse-header.collapsed .browse-header-button-bar { transform: translateY(-6.25em); opacity: 0; } -.browse-header-button-bar { border-radius: 0.15em; font-size: 1.1em; height: 2.4em; margin-bottom: -0.59em; padding: 0.59em; position: absolute; right: 3.5em; background: rgba(0, 0, 0, 0.4); } -.limited-animation .browse-header-button-bar { background: rgb(31, 36, 38); } -.limited-memory.limited-animation .browse-header-button-bar { top: 13em; } -.browse-header-button-bar, .browse-header-metadata { bottom: 3.9em; } -.browse-header-button-bar .button { border-radius: 0.12em; color: rgb(225, 225, 225); cursor: default; display: inline-block; height: 2.4em; min-width: 8.2em; overflow: hidden; padding-right: 1em; white-space: nowrap; } -.browse-header-button-bar .button span { line-height: 2.4em; vertical-align: middle; } -.browse-header-button-bar .button.focused, .browse-header-button-bar .button.focused:hover { color: rgb(33, 33, 33); background: rgb(225, 225, 225); } -.browse-header-button-bar .button:hover { background-color: rgb(102, 102, 102); } -.browse-header-button-bar .button .icon { display: inline-block; font-family: youtube-icons; height: 2.4em; margin: 0px 1em; } -.browse-header-subscribe .icon::before { font-size: 2em; } -.browse-header-subscribe.toggle-selected .icon::before { content: ""; font-size: 1em; } -.browse-header-subscribe.toggle-selected.focused { color: rgb(206, 41, 45); } -.browse-header-subscribe.disabled { background-color: rgba(0, 0, 0, 0); } -.browse-content { height: 80%; left: 8em; position: absolute; top: 14.5%; width: 100%; } -.browse-sets.collapsed .browse-content { transform: translateY(44%); } -.limited-memory .browse-sets.collapsed .browse-content { top: 20em; transform: none; } -#browse-header, .browse-header-avatar, .browse-header-button-bar, .browse-content, #browse-header .title { transform: translateZ(0px); transition: -webkit-transform 0.25s; } -.browse-header-button-bar { transition: opacity 0.25s, transform 0.25s; } -.limited-animation #browse-header, .limited-animation .browse-header-avatar, .limited-animation #browse-header.collapsed .browse-header-avatar, .limited-animation .browse-content, .limited-animation .browse-header-button-bar, .limited-animation #browse-header .title, .limited-animation .browse-content .shelves, .limited-animation .browse-header-metadata, .limited-animation .shelf #content-container, .limited-animation .shelves > .title, .limited-animation .shelf > .title, .limited-animation .horizontal-list > .content, .limited-animation .horizontal-list, .limited-animation .shelves .carousel { transition: none; transform: none; } -.limited-animation #browse-header.collapsed .browse-header-metadata { font-size: 0.6em; left: 13.25em; top: 17.75em; } -.limited-animation #browse-header.collapsed .browse-header-metadata .title { font-size: 3em; } -.limited-memory #browse-header.collapsed .browse-header-metadata .title { font-size: 1.8em; } -.limited-animation .browse-content .list { margin-left: -9.5em; width: 126em; } -.limited-animation .browse-content .shelf > .title { margin-left: 6em; } -.limited-animation.sets-ui .action-tile:not(.focused), .limited-animation.sets-ui .auto-play-tile:not(.focused) .video-tile, .limited-animation.sets-ui .channel-tile:not(.focused), .limited-animation.sets-ui .playlist-tile:not(.focused), .limited-animation.sets-ui .recent-search-tile:not(.focused), .limited-animation.sets-ui .video-tile:not(.focused), .rockandroll.limited-animation.sets-ui .action-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile, .rockandroll.limited-animation.sets-ui .channel-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .playlist-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .video-tile:hover:not(.focused) { background-color: rgb(33, 33, 33); } -.limited-animation.sets-ui .action-tile:hover:not(.focused), .limited-animation.sets-ui .auto-play-tile:hover:not(.focused) .video-tile, .limited-animation.sets-ui .channel-tile:hover:not(.focused), .limited-animation.sets-ui .playlist-tile:hover:not(.focused), .limited-animation.sets-ui .recent-search-tile:hover:not(.focused), .limited-animation.sets-ui .video-tile:hover:not(.focused) { background-color: rgb(65, 65, 65); } -.browse-content .shelves { margin-left: 0em; transform: translateZ(0px); } -.browse-content .shelves > .no-content-message, .browse-content .horizontal-list > .no-content-message { margin-left: -8em; } -.shelves > .no-content-message, .horizontal-list > .no-content-message { display: none; position: absolute; top: 8em; width: 100%; } -.shelves.no-content > .no-content-message, .horizontal-list.no-content > .no-content-message { display: block; } -.shelves > .no-content-message .text, .horizontal-list > .no-content-message .text { color: rgb(241, 241, 241); font-size: 1.8em; text-align: center; text-shadow: rgb(0, 0, 0) 0.04em 0.04em; } -.shelf { width: 100%; } -.limited-animation .shelf { margin-bottom: 1.8em; } -.carousel .shelf { position: absolute; } -.shelf #content-container { transform: translateZ(0px); } -.shelves > .title, .shelf > .title { color: rgb(153, 153, 153); font-size: 1.6em; margin-bottom: 1em; margin-top: 0.2em; transform: translateZ(0px); white-space: nowrap; } -.shelves > .title, .shelf.selected > .title { color: rgb(255, 255, 255); } -.shelf > .title .annotation { color: rgb(119, 119, 119); font-size: 70%; margin-left: 0.5em; } -.shelf.selected > .title .annotation { color: rgb(221, 221, 221); } -.horizontal-list.no-model, .shelf.no-model, .survey-shelf.no-model { display: none; } -.shelf > .icon { display: none; } -.horizontal-list > .content { font-size: 79%; height: 26em; opacity: 1; transform: translateZ(0px); } -.horizontal-list.focused > .content { opacity: 1; } -.horizontal-list, .shelves .carousel, .browse-header-metadata { transform: translateZ(0px); } -.shelf0to0 { opacity: 1; transform: translateY(0%) scale(1); } -@-webkit-keyframes shelf0to1-anim { - 0% { transform: translateY(0%); } - 100% { transform: translateY(100%); } -} -.shelf0to1 { animation: shelf0to1-anim 200ms forwards; } -@-webkit-keyframes shelf0to2-anim { - 0% { opacity: 1; transform: translateX(0%) translateY(0%) scale(1); } - 100% { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); } -} -.shelf0to2 { animation: shelf0to2-anim 200ms forwards; } -@-webkit-keyframes shelf1to0-anim { - 0% { transform: translateX(0%) translateY(100%); } - 100% { transform: translateX(0%) translateY(0%); } -} -.shelf1to0 { animation: shelf1to0-anim 200ms forwards; } -.shelf1to1 { opacity: 1; transform: translateX(0%) translateY(100%) scale(1); } -@-webkit-keyframes shelf1to2-anim { - 0% { transform: translateX(0%) translateY(100%); } - 99% { transform: translateX(0%) translateY(200%); } - 100% { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); } -} -.shelf1to2 { animation: shelf1to2-anim 200ms forwards; } -@-webkit-keyframes shelf2to0-anim { - 0% { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); } - 100% { opacity: 1; transform: translateX(0%) translateY(0%) scale(1); } -} -.shelf2to0 { animation: shelf2to0-anim 200ms forwards; } -@-webkit-keyframes shelf2to1-anim { - 0% { opacity: 1; transform: translateX(0%) translateY(200%); } - 100% { opacity: 1; transform: translateX(0%) translateY(100%); } -} -.shelf2to1 { animation: shelf2to1-anim 200ms forwards; } -.shelf2to2 { opacity: 0; transform: translateX(-2%) translateY(-11%) scale(0.75); } -.limited-memory .shelves .list .video-tile:nth-child(1) .video-thumb, .limited-memory .shelves .list .channel-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #search .horizontal-list .list .video-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #search .horizontal-list .list .channel-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #browse .list .video-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #browse .list .channel-tile:nth-child(1) .video-thumb, .limited-memory.sets-ui #browse .list .video-tile:last-child .video-thumb, .limited-memory.sets-ui #browse .list .channel-tile:last-child .video-thumb { background: none !important; } -.survey-shelf { position: absolute; } -.survey-shelf > .title { color: rgb(255, 255, 255); display: inline-block; font-size: 1.6em; margin-bottom: 1em; margin-top: 0.2em; } -.survey-shelf .action-tile .content > .title { display: none; } -.survey-shelf .horizontal-list > .content { font-size: 79%; height: 26em; } -.survey-shelf .description { color: rgb(255, 255, 255); visibility: visible; } -.survey-shelf .button { display: inline-block; margin-bottom: 1em; margin-left: 2em; } -.survey-shelf .sliding-highlighter { height: 8em; width: 8em; } -.survey-shelf .action-tile, .exp-densityBrowse .survey-shelf .action-tile { border: 0px; height: 8em; width: 8em; } -.survey-shelf .action-tile .content { height: 8em; width: 8em; } -.survey-shelf .action-tile .description { color: rgb(119, 119, 119); font-size: 1.2em; margin-top: -1.3em; opacity: 1; white-space: nowrap; } -.exp-densityBrowse .survey-shelf.focused .action-tile .description { display: block; } -.exp-densityBrowse .survey-shelf .action-tile .description { display: none; } -.survey-shelf .action-tile .large-action-icon, .exp-densityBrowse .survey-shelf .action-tile .large-action-icon { font-size: 5em; margin-top: 0.26em; padding-right: 0.2em; background-color: transparent; } -.survey-shelf .action-tile.selected .large-action-icon, .exp-densityBrowse .survey-shelf .action-tile.selected .large-action-icon { color: rgb(255, 255, 255); } -.survey-shelf .action-tile.focused .large-action-icon, .exp-densityBrowse .survey-shelf .action-tile.focused .large-action-icon { color: rgb(34, 34, 34); } -.survey-shelf .button.focused { border-radius: 0.1em; color: rgb(34, 34, 34); padding: 0.2em; background-color: rgb(255, 255, 255); } -.survey-shelf .button { color: rgb(119, 119, 119); } -.limited-animation .survey-shelf { margin-bottom: 5em; position: relative; } -.limited-animation .survey-shelf > .title { margin-left: 6em; } -.limited-animation .exp-densityBrowse .survey-shelf > .title { margin-left: 5em; } -.limited-animation .survey-shelf .horizontal-list { margin-left: 17.5em; } -.limited-animation .exp-densityBrowse .survey-shelf .horizontal-list { margin-left: 13.5em; } -.limited-animation .exp-densityBrowse .survey-shelf .action-tile .large-action-icon { margin-top: 0.12em; } -.limited-animation .exp-densityBrowse .survey-shelf .action-tile .description { display: block; } -#guide { box-shadow: black 0.1em 0px 1em 0em; height: 100%; left: 0px; overflow: hidden; position: absolute; transform: translateX(-23em) translateZ(0px); transition: transform 400ms cubic-bezier(0.4, 0, 0.2, 1); width: 28em; } -.limited-memory.limited-animation #guide { box-shadow: none; transform: none; } -.limited-memory #guide.focused { border-right-style: none; } -#guide.focused { transform: translateX(0px); } -#guide:hover { background-color: rgba(255, 255, 255, 0.2); } -.limited-animation #guide:hover { background: none; } -.limited-animation #guide, .limited-animation #guide #user-info-background, .limited-animation .guide-carousel-background { transition: none; } -.guide-carousel-background { height: 100%; left: 0em; position: absolute; top: 0em; width: 100%; transition: background-color 400ms; background-color: rgba(0, 0, 0, 0.2); } -.limited-animation .guide-carousel-background, .limited-animation #guide #user-info-background { background-color: rgb(31, 36, 38); } -.limited-animation #guide:hover .guide-carousel-background, .limited-animation #guide:hover #user-info-background { background-color: rgb(56, 65, 69); } -.limited-animation.limited-memory .guide-carousel-background, .limited-animation.limited-memory #guide #user-info-background { background-color: rgb(223, 35, 35); } -.limited-memory .guide-carousel-background, .limited-memory #guide #user-info-background, #guide .list { display: none; } -.limited-memory #guide.focused .guide-carousel-background, .limited-memory #guide.focused.logged-in #user-info-background, #guide.focused .list { display: block; } -.logged-in .guide-carousel-background { top: 8.5em; } -#guide.focused .guide-carousel-background, #guide.focused:hover .guide-carousel-background { background-color: rgb(223, 35, 35); } -.collapsed-guide, #guide.focused .collapsed-guide { display: none; } -.collapsed-guide-icons { color: rgb(133, 136, 138); font-size: 1.6em; left: 15em; opacity: 1; position: absolute; top: 7.5em; } -.collapsed-guide-icon { font-family: youtube-icons; margin-top: 1em; margin-bottom: 1em; text-align: center; width: 2em; } -#guide .collapsed-guide-icons { transition: opacity 150ms 450ms; } -.limited-memory .collapsed-guide-icons { left: 1em; } -.limited-animation #guide .collapsed-guide-icons { transition: none; } -#guide.focused .collapsed-guide-icons { opacity: 0; transition: none; } -#guide .collapsed-guide-icon.icon-guide-my-subs { display: none; } -#guide.logged-in .collapsed-guide-icon.icon-guide-my-subs { display: block; } -#guide.logged-in .collapsed-guide-icon.icon-popular { display: none; } -.collapsed-guide-icon.icon-music { font-size: 0.925em; padding-left: 0.0375em; } -.limited-memory .collapsed-guide { border-right-width: 0.2em; border-right-style: solid; border-right-color: rgb(17, 17, 17); display: block; height: 100%; left: 0px; width: 6em; background-color: rgb(31, 36, 38); } -#error-message { display: none; } -#guide.error.focused #error-message { color: rgb(255, 255, 255); display: block; font-size: 2em; padding: 2em; position: absolute; text-align: center; top: 12em; } -#guide .sliding-highlighter { display: none; width: 100%; height: 4.2em; opacity: 0; } -#guide.focused .sliding-highlighter { opacity: 1; } -#guide.focused .sliding-highlighter { display: block; } -#guide.focused #user-info-background { visibility: visible; } -#guide #user-info-background { transition: background-color 400ms; background-color: rgba(0, 0, 0, 0.2); } -#guide.focused #user-info-background, #guide.focused:hover #user-info-background { background-color: rgb(147, 23, 23); } -.logged-in #user-info-background { display: block; } -#guide.focused .guide-user-text { visibility: visible; } -#guide .carousel, #guide .list, #guide .sliding-highlighter { color: rgb(255, 255, 255); margin-top: 2em; } -#guide.logged-in .carousel, #guide.logged-in .list, #guide.logged-in .sliding-highlighter { margin-top: 1em; } -#guide .carousel.hidden { visibility: hidden; display: block !important; } -#guide .list { position: relative; } -.carousel .guide-button { position: absolute; } -.list .guide-button { margin-bottom: 0.1em; } -.guide-button { font-size: 1.6em; height: 1.83em; overflow: hidden; padding: 0.5em 0.27em 0.3em 2.9em; white-space: nowrap; } -.guide-button:hover { cursor: pointer; padding-right: 1.78em; background: rgb(153, 0, 0); } -.guide-button.selected:hover { background: transparent; } -.guide-button.disabled:hover { cursor: inherit; padding-right: inherit; background: transparent; } -.guide-button.disabled { padding-left: 2.1em; text-transform: uppercase; } -.guide-button.disabled.footer { text-transform: none; } -.guide-button-icon { color: rgb(239, 145, 145); display: inline-block; font-family: youtube-icons; font-size: 1.2em; margin-top: 0.2em; text-align: center; width: 1.8em; } -.guide-button.disabled .guide-button-icon { display: none; } -.guide-user-text, .guide-button-title { color: rgb(251, 218, 218); display: inline-block; line-height: 1.7em; overflow: hidden; padding-left: 0.5em; text-overflow: ellipsis; vertical-align: top; } -.guide-button.disabled .guide-button-title { color: rgb(239, 145, 145); } -.guide-user-text { visibility: hidden; margin-left: -0.4em; position: relative; top: 30%; text-overflow: ellipsis; width: 9.5em; } -.guide-button-title { width: 11em; } -.engaged .guide-button-title { width: 8em; } -.guide-button.footer .guide-button-title { font-size: 75%; padding-top: 0.8em; width: 21.15em; } -.guide-button-icon .image, #guide-user-avatar { height: 1em; width: 1em; background: 50% 50% / 100% no-repeat; } -.guide-button-icon .image { box-shadow: rgb(239, 145, 145) 0px 0px 0px 1px; margin: 0px 0.4em; background-color: rgb(255, 255, 255); } -.guide-button.focused .guide-button-icon .image { box-shadow: none; } -.guide-button .image { display: none; } -.guide-button.has-image .image { display: block; } -#guide-user-avatar { border-radius: 50%; box-shadow: rgba(239, 145, 145, 0.4) 0px 0px 0px 0.05em, rgb(239, 145, 145) 0px 0px 0.05em; display: inline-block; font-size: 2.31em; margin: 0.2em 0.2em 0.2em 0.4em; } -#guide-user-avatar, .guide-user-text, .guide-button-icon, .guide-button-title { transition: color 50ms 25ms; } -.no-transition .guide-button .guide-button-icon, .no-transition .guide-button .guide-button-title, .limited-animation .guide-button .guide-button-icon, .limited-animation .guide-button .guide-button-title, .limited-animation #guide-user-avatar, .limited-animation .guide-user-text { transition: none; } -.guide-button.focused .guide-button-icon, .guide-button.focused .guide-button-title { color: rgb(223, 35, 35); } -.limited-animation .guide-button.focused { background-color: rgb(255, 255, 255); } -.user-info-container { height: 2.6em; padding: 1.1em 0em 0em 1.8em; font-size: 1.6em; white-space: nowrap; } -#user-info-background { display: none; height: 8.53em; position: relative; width: inherit; z-index: 1; } -.sliding-highlighter .select { display: none; height: 2.9em; min-width: 3.5em; padding: 1.3em 0.6em 0em; position: absolute; right: 0px; text-align: center; background-color: rgba(0, 0, 0, 0.8); } -.engaged .guide .sliding-highlighter .select { display: block; } -.unlimited .guide-user-text { line-height: 1em; } -.guide-user-unlimited { font-size: 0.8em; color: rgb(170, 136, 136); text-transform: uppercase; } -#settings { height: 100%; overflow: visible; position: absolute; right: 0px; left: 4.5em; } -.settings-shelf { height: 24em; margin-left: 3.5em; margin-top: 1em; position: absolute; top: 19%; width: 100%; } -.settings-title { color: rgb(255, 255, 255); font-size: 1.2em; line-height: 3em; white-space: nowrap; } -.limited-animation .settings .content .list { width: 130em; } -.limited-animation #settings-items { margin-left: -17em; } -.settings-horizontal-list > .content { font-size: 79%; } -.settings-horizontal-list > .no-content-message { display: none; } -.pointer-overlay { display: block; } -.pointer-overlay .nav-arrow { cursor: pointer; display: none; height: 5em; opacity: 0.5; position: absolute; width: 5em; background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png); background-size: 100%; background-repeat: no-repeat; } -.pointer-overlay.enabled .nav-arrow { display: block; } -.pointer-overlay .nav-arrow:hover { opacity: 1; } -.pointer-overlay .up-arrow { left: 45%; top: 18%; background-position: 0px 100%; } -.pointer-overlay .down-arrow { bottom: 11%; left: 45%; background-position: 0px 0%; } -.pointer-overlay .left-arrow { top: 50%; left: 5%; background-position: 0px 33.3%; } -.settings-focused .pointer-overlay .left-arrow, .browse-sets-state .pointer-overlay .left-arrow, .search-state .pointer-overlay .left-arrow { left: 7%; } -.pointer-overlay .right-arrow { top: 50%; right: 5%; background-position: 0px 66.7%; } -#search.input-open + .pointer-overlay .up-arrow, .post-play-state .pointer-overlay .up-arrow, .post-play-state .pointer-overlay .down-arrow { display: none; } -.watch-state .pointer-overlay .down-arrow { bottom: 2%; } -.search-state.guide-focused .pointer-overlay .up-arrow { top: 20%; } -@media screen and (aspect-ratio: 5/4) { - #dialog.browse-sets #dialog-wrapper { padding: 1.3em 2em; } - .flag-list-container.flag-options-dialog { font-size: 0.875em; } -} -@media screen and (max-aspect-ratio: 4/3) { - .player-controls #button-list { font-size: 0.875em; } - #transport-controls.ad-active .player-controls-widget .player-controls #button-list { font-size: 1em; } - .fresh-transport-controls .progress-bar { width: 70%; } - .fresh-transport-controls #player-time-elapsed, .fresh-transport-controls .player-time-total { font-size: 1.1em; width: 10%; } -} -@media screen and (aspect-ratio: 4/3) { - #browse-header .title { width: 18.3em; } - #browse-header.one-button .title { width: 13.2em; } - #browse-header.two-buttons .title { width: 8.5em; } - .sets-ui .flag-list.grid { font-size: 0.8em; } - .flag-claim { font-size: 1.4em; } - #search .search-pairing { font-size: 0.7em; } - .sets-ui .debug-dialog { font-size: 0.8em; } - .voice-footer .list { padding-top: 0px; width: 16em; } -} -@media screen and (min-width: 3840px) { - .player-controls { top: 21px; } -} -@media screen and (min-width: 1919px) { - .opera .video-stream { height: 1080px; width: 1920px; } - .watch-video-tile, .watch-list .button { padding: 10px; } -} -@media screen and (max-height: 576px) and (max-width: 1024px) and (min-width: 640px) { - .countdown-ad-callout { font-size: 1.3em; right: 10%; } - .opera .video-stream { height: 576px; width: 1024px; } - #keyboard-grid .button { width: 0.7em; } - #dialog-wrapper { padding-left: 4em; padding-right: 4em; } - .pairing { transform-origin: 0px 50% 0px; transform: scale(0.7); } - .browse-sets #browse-header.collapsed { transform: translateY(-19%); } -} -@media screen and (max-height: 480px) and (max-width: 720px) { - .countdown-ad-callout { font-size: 0.9em; right: 5%; } - .skip-ad-callout { right: 3%; } - .opera .video-stream { height: 480px; } - #search .pairing .alternatives { margin: 0px 0px 0px 1em; } - #keyboard-grid .button { width: 0.8em; } - #search .pairing .search-message .title { margin-top: 0.7em; } - #dialog-view .pairing { font-size: 0.8em; margin-top: 2em; } - .watch-list .list { margin-left: -4em; } -} -@media screen and (max-height: 480px) and (max-width: 640px) { - .opera .video-stream { height: 480px; width: 640px; } - #keyboard-grid .button { width: 0.7em; } - #dialog-view .reset-help { display: block; width: 27em; } - .watch-video-tile, .watch-list .button { padding: 4px; } - .browse-header-metadata { bottom: 3.9em; } - .browse-sets #browse-header.collapsed { transform: translateY(-27%); } - .voice-footer .list { font-size: 0.6em; margin-left: 35%; width: 35%; } - .engaged .engagement-indicator { display: inline-block; font-size: 1.3em; height: 3em; margin-bottom: 1.5em; } - .engaged .engagement-indicator .title { display: inline-block; } - .engagement-indicator .stop-listening .icon { display: inline-block; height: 3em; left: 0px; top: 0px; width: 15%; } -} -@media screen and (max-width: 1440px) and (min-height: 1080px) { - .video-tile-container { transform: scale(0.7); transform-origin: right top 0px; } - .player-controls #button-list .button, .player-controls #button-list .toggle-button { margin-right: 0.2em; margin-left: 0.2em; } - .fresh-transport-controls .progress-bar { width: 59%; } - .fresh-transport-controls #player-time-elapsed, .fresh-transport-controls .player-time-total { font-size: 1em; width: 14%; } - .fresh-transport-controls .button, .fresh-transport-controls .toggle-button { font-size: 1.1em; } - .fresh-transport-controls #transport-more-button { font-size: 1.7em; } - #dialog-wrapper { padding: 1.3em 3em; } - .dialog-contents { font-size: 95%; } - #dialog-wrapper .connection-steps { padding: 0px; } - #dialog-wrapper .pairing .qr-code, #dialog-wrapper .pairing .connected-list { margin: 0.2em; } - .context-menu-list { left: 30%; right: 30%; } - .voice-footer .list { font-size: 0.65em; padding-left: 22em; padding-right: 18em; padding-top: 1.3em; } -} -.sets-ui .carousel .item, .sets-ui .carousel .channel-tile, .sets-ui .carousel .auto-play-tile { background-color: inherit !important; } -.sets-ui .carousel .item:hover, .sets-ui .carousel .channel-tile:hover, .sets-ui .carousel .auto-play-tile:hover { background-color: rgba(255, 255, 255, 0.0980392) !important; } -.sets-ui .tile .channel-bottom > .title, .sets-ui .tile .tile-bottom > .title { color: rgb(225, 225, 225); } -.sets-ui .tile .channel-bottom > .details, .sets-ui .tile .tile-bottom > .details { color: rgb(100, 100, 100); } -.sets-ui .tile.focused.selected .channel-bottom > .title, .sets-ui .tile.focused.selected .tile-bottom > .title { color: rgb(33, 33, 33); } -.sets-ui .tile.focused.selected .channel-bottom > .details, .sets-ui .tile.focused.selected .tile-bottom > .details { color: rgb(141, 141, 141); } -.sets-ui #transport-controls .player-controls #button-list div.icon-player-more, .sets-ui #transport-controls .player-controls #button-list div.icon-player-less { color: rgb(255, 255, 255); } -.sets-ui #transport-controls .player-controls #button-list div.icon-player-more.focused, .sets-ui #transport-controls .player-controls #button-list div.icon-player-less.focused { color: rgb(34, 34, 34); } -.sets-ui .settings-title { font-size: 1.5em; } -.sets-ui .action-tile .title { font-size: 2.4em; margin-left: 0.1em; margin-right: 0.1em; } -.sets-ui .flag-list.grid { margin: 3.25em; } -.sets-ui .flag-list .list { text-align: left; } -.sets-ui .flag-list .button { width: 14em; text-align: center; } -.sets-ui .flag-example { top: 20%; } -.sets-ui .flag-video { margin-left: 2em; text-align: left; } -.sets-ui .flag-claim .privacy-invasion { margin: auto; width: 50%; } -.sets-ui .authentication-error-dialog, .sets-ui .delete-video-error, .sets-ui .missing-channel-error, .sets-ui .server-unavailable, .sets-ui .network-error-dialog { margin-top: 1em; } -.sets-ui .eureka-authorization-dialog .icon, .sets-ui .eureka-player-error-dialog .icon { margin-left: 3em; } -.sets-ui .eureka-authorization-dialog .info, .sets-ui .eureka-player-error-dialog .info { width: 50%; } -.sets-ui .debug-dialog { padding: 0px 1em; text-align: left; } -.sets-ui .text-dialog #dialog-view { width: auto; } -.sets-ui #dialog .platform-container { font-size: 0.6em; margin-bottom: 0.5em; } -.sets-ui .paid-channel-dialog { margin: 1em; } -.sets-ui #dialog .connection-instructions .icon-settings-pair { display: none; } -.sets-ui .closed-captions-dialog { text-align: left; padding-left: 1em; } -.sets-ui .delete-video-error, .sets-ui .paid-scope-dialog, .sets-ui .video-edit-error, .sets-ui .video-processing, .sets-ui .video-upload-error { margin: 3em; font-size: 1.6em; } -.limited-animation .auto-play-tile.focused .video-tile { background-color: rgb(241, 241, 241); } -.limited-animation.sets-ui .title-card { background: linear-gradient(rgba(0, 0, 0, 0.901961), rgba(0, 0, 0, 0.8), transparent); } -.limited-animation.sets-ui #search #text-box-background, .limited-animation.sets-ui #search #search-text-entry { background-color: rgba(0, 0, 0, 0); } -.sets-ui .scrolling-text { text-align: left; padding-left: 1em; height: 20em; } -.sets-ui #dialog .scrollbar { right: 11em; } -.sets-ui #dialog-view .reset-help { width: 20em; } -.sets-ui #dialog.remote-reset-dialog .buttons { position: inherit; } -.sets-ui #dialog.remote-reset-dialog .reset-help { height: 11em; padding-left: 1em; text-align: left; } -.sets-ui #dialog.remote-reset-dialog .connected-list { margin-right: 2em; } -.sets-ui .dialog-focused #legend { bottom: 17%; right: 16%; } -.exp-densityFiveTiles .horizontal-list > .content { font-size: 59%; } -.exp-densityFiveTiles .shelf > .title { font-size: 1.5em; margin-bottom: 0.75em; margin-top: 0px; } -.exp-densityFiveTiles .channel-bottom .title, .exp-densityFiveTiles .tile-bottom .title { font-size: 1.75em; } -.exp-densityFiveTiles .tile-bottom .details { font-size: 1.5em; height: 50%; margin: 0.2em 1em 0px 0px; } -.exp-densityFiveTiles .channel-top .video-thumb { border-radius: 50%; } -.limited-animation .exp-densityFiveTiles .browse-content .list { margin-left: -8em; width: 155em; } -.exp-densityFourTiles .horizontal-list > .content { font-size: 67%; } -.exp-densityFourTiles .shelf > .title { font-size: 1.5em; margin-bottom: 0.75em; margin-top: 0px; } -.exp-densityFourTiles .channel-bottom .title, .exp-densityFourTiles .tile-bottom .title { font-size: 1.75em; } -.exp-densityFourTiles .tile-bottom .details { font-size: 1.5em; height: 50%; margin: 0.2em 1em 0px 0px; } -.limited-animation .exp-densityFourTiles .browse-content .list { margin-left: -8.5em; width: 155em; } -.exp-densityFourTiles .channel-top .video-thumb { border-radius: 50%; } -.exp-densityHideMetadata .shelf .horizontal-list .tile-bottom, .exp-densityHideMetadata .shelf .horizontal-list .channel-bottom { display: none; } -.exp-densityHideMetadata .shelf.selected .horizontal-list .tile-bottom, .exp-densityHideMetadata .shelf.selected .horizontal-list .channel-bottom { display: block; } -.exp-densityHideMetadata .horizontal-list .video-tile .tile-top .decoration { display: none; } -.exp-densityHideMetadata #search .tile-top .decoration, .exp-densityHideMetadata #post-play-list .tile-top .decoration, .exp-densityHideMetadata .shelf.selected .horizontal-list .tile-top .decoration { display: block; } -.exp-densityHideMetadata .shelf:not(.selected) .channel-tile .video-thumb { height: 70%; width: 70%; } -.sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .item:hover, .sets-ui .exp-densityHideMetadata .shelf:not(.selected) .carousel .channel-tile:hover { background-color: inherit !important; } -.limited-animation .exp-densityHideMetadata .browse-content .list .shelf:nth-child(1) { margin-bottom: 9.5em; } -.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:not(.focused), .limited-animation.sets-ui .exp-densityHideMetadata .video-tile:not(.focused) { background-color: inherit; } -.rockandroll.limited-animation.sets-ui .exp-densityHideMetadata .channel-tile:hover:not(.focused), .rockandroll.limited-animation.sets-ui .exp-densityHideMetadata .video-tile:hover:not(.focused) { background-color: inherit; }</style><style>@font-face { font-family: roboto-regular; src: url(www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf) format(truetype); } -html { font-family: roboto-regular; } -body { font-family: roboto-regular; } -.button span { font-family: roboto-regular; } -.toggle-button span { font-family: roboto-regular; } -@font-face { font-family: youtube-icons; src: url(www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf) format(truetype); }</style><script>(function (resourcePaths) { - var imageContainer = document.createElement('div'); - imageContainer.style.position = 'absolute'; - imageContainer.style.left = '0px'; - imageContainer.style.top = '0px'; - imageContainer.style.visibility = 'hidden'; - - var pendingResourceCount = 0; - resourcePaths.forEach(function(resourcePath) { - console.log(resourcePath); - if (/\.(jpeg|jpg|png)$/i.test(resourcePath)) { - ++pendingResourceCount; - console.log(pendingResourceCount); - var imageElement = new Image(); - imageElement.src = resourcePath; - imageContainer.appendChild(imageElement); - } - }); - })(["www.youtube.com/s/tv/fonts/CutiveMono-Regular.woff","www.youtube.com/s/tv/fonts/PTM55FT.woff","www.youtube.com/s/tv/fonts/PT_Serif-Caption-Web-Regular.woff","www.youtube.com/s/tv/fonts/PT_Sans-Caption-Web-Regular.woff","www.youtube.com/s/tv/fonts/Handlee-Regular.woff","www.youtube.com/s/tv/fonts/DancingScript-Regular.woff","www.youtube.com/s/tv/fonts/MarcellusSC-Regular.woff","www.youtube.com/s/tv/html5/f0d770f4/img/circle.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png","www.youtube.com/s/tv/html5/f0d770f4/img/cast_disconnected_blue.png","www.youtube.com/s/tv/html5/f0d770f4/img/pair_promo.png","www.youtube.com/s/tv/html5/f0d770f4/img/dial-sprite.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_mute_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_0_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_1_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/volume_2_pressed.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-help.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-feedback.png","www.youtube.com/s/tv/html5/f0d770f4/img/flag.png","www.youtube.com/s/tv/html5/f0d770f4/img/pairing-promo-combo.png","www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_light.png","www.youtube.com/s/tv/html5/f0d770f4/img/edit_tile_dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_light.png","www.youtube.com/s/tv/html5/f0d770f4/img/trash_tile_dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-check-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-private-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-public-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-light.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-privacy-unlisted-dark.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-aaa-engaged.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-desktop.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-bbb.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ccc.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ddd.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-eee.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-fff.png","www.youtube.com/s/tv/html5/f0d770f4/img/legend-sprite-ggg.png","www.youtube.com/s/tv/html5/f0d770f4/img/icon-playbutton.png","www.youtube.com/s/tv/html5/f0d770f4/img/player-play.png","www.youtube.com/s/tv/html5/f0d770f4/img/player-pause.png","www.youtube.com/s/tv/html5/f0d770f4/app-prod.css","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-yt-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/yt-kids-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-multi-user.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-yt-mix.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-tv-queue.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-promo.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-mother-goose.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-rainbow.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-sesame.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-talking-tom.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-kids-wonderquest.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-gaming-heart.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-end-screen-loki.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music.jpg","www.youtube.com/s/tv/html5/f0d770f4/img/call-to-cast-music-party-logo.png","www.youtube.com/s/tv/html5/f0d770f4/img/yt-music-logo-small.png","www.youtube.com/s/tv/html5/f0d770f4/img/yt-logo-fullcolor.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-unmute-onhover-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-mute-onhover-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/button-fullscreen-onhover-active.png","www.youtube.com/s/tv/html5/f0d770f4/img/motion-control-sprite.png","www.youtube.com/s/tv/html5/misc/fonts/Roboto-Regular-20140804.ttf","www.youtube.com/s/tv/html5/f0d770f4/img/icons.ttf","www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg","i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg","i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg","i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg","i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg","i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg","i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg","i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg","i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg","i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg","i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg","i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg","i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg","i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg","i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg","i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg","i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg","i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg","i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg","i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg","i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg","i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg","i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg","i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg","i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg","i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg","i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg","i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg","i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg","i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg","i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg","i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg","i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg","i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg","i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg","yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg","i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg","i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg"]);</script></head> - <body class="desktop sets-ui lang-en_US lang-case-sensitive" style="font-size: 150%;"> - - <div id="leanback"><div id="app-markup" class="focused exp-autoOpenGuide exp-mdxIgnoreFlings exp-innertubeCountdown exp-enableSafetyModeRename exp-atomSubscriptionsMultirowShelves browse-sets-state guide-focused application" tabindex="-1"> <div id="background" class="no-model background" tabindex="-1" style="background-image: url(www.youtube.com/s/tv/html5/f0d770f4/img/default_bg.jpg);"></div> <div id="watch" class="no-model watch" tabindex="-1"> <div id="leanback-player-container"><div class="html5-video-player el-leanback ytp-no-controls" tabindex="-1" id="movie_player" data-version="//s.ytimg.com/yts/jsbin/html5player-new-en_GB-vflmdFuIW/html5player-new.js"><div class="html5-video-container"><video class="video-stream html5-main-video" style="width: 1920px; height: 1080px; left: 0px; top: -1080px; transform: none;"></video><div class="html5-video-content" style="width: 1920px; height: 1080px; left: 0px; top: 0px;"></div></div></div></div> <div class="title-card no-model watch-title-tray" id="title-tray" tabindex="-1"> <div class="player-meta"> <div class="user-details hidden"> <div class="message">Added by </div> <div class="avatar no-model image" data-image-url="{{addedByUserAvatarUrl}}" tabindex="-1"></div> </div> <div class="player-video-avatar no-model image" data-image-url="{{channelAvatarUrl}}" tabindex="-1"></div> <div class="player-video-text"> <div class="player-video-title"></div> <div class="player-video-details"> <div class="username"></div> <div class="set-context hidden"></div> <div class="set-context-position hidden">0 of 0</div> <div class="uploaded-date"></div> <div class="view-count"><span class="view-count-label"></span></div> <div class="hidden no-model quality-status" tabindex="-1"> <div class="quality-status-hd-badge"></div></div> <div id="badges" class="badges hidden"> <span class="live-badge">Live</span> </div> <div class="ypc-preview">Preview: This video requires payment to watch.</div> </div> </div> </div></div> <div id="eureka-player-controls-container"> <div id="eureka-player-controls"></div> </div> <div id="pivot-post-play" class="hidden no-model pivot-post-play" tabindex="-1"> <div id="post-play-list" class="no-model no-content postplay-horizontal-list" tabindex="-1"> <div class="no-content-message"> <div class="text">No videos are available</div> </div> <div class="content"><div class="no-model carousel" tabindex="-1"></div><div class="hidden no-model pivot-sliding-highlighter" tabindex="-1"> <div class="select">Select</div></div></div></div></div> <div id="bottom-half"> <div id="transport-controls" class="no-model transport-controls" tabindex="-1"> <div class="player-controls-widget"> <div id="player-controls" class="player-controls"> <div id="button-list" class=" list" data-model="{{buttonCollection}}" data-enable-sounds="false" tabindex="-1"><div class="icon-ellipsis button" tabindex="-1"><span class="label">more actions</span></div><div class="icon-home button" tabindex="-1"><span class="label">Go Home</span></div><div class="icon-player-prev button" tabindex="-1"><span class="label">skip backward</span></div><div class="icon-player-rew button" tabindex="-1"><span class="label">rewind</span></div><div class="selected icon-player-play toggle-button" tabindex="-1"><span>play</span></div><div class="icon-player-ff button" tabindex="-1"><span class="label">forward</span></div><div class="icon-player-next button" tabindex="-1"><span class="label">skip forward</span></div><div class="icon-player-closedcaptions toggle-button" tabindex="-1"><span>captions</span></div><div class="disabled spacer button" tabindex="-1"><span class="label"></span></div></div> </div> <div class="player-seekbar"> <div id="progress-bar" class=" progress-bar" tabindex="-1"> <div class="progress-bar-line"> <div class="progress-bar-background"></div> <div class="progress-bar-loaded" style="width:0%"></div> <div class="progress-bar-played" style="width:0%"></div> </div> <div class="progress-bar-playhead"> <div class="no-model cue-range-markers" tabindex="-1"></div> <div class="progress-bar-disc" style="left:0%"></div> </div></div> <div id="player-time-elapsed" class="no-model elapsed-time" tabindex="-1">0:00</div> <div class="player-time-total"></div> <div class="live-indicator">Live</div> </div> </div></div> <div class="hidden skip-ad-button" tabindex="-1"> <div class="label"> <span class="skip-button-text"></span> <span class="skip-symbol icon-player-next"></span> <span class="skip-symbol icon-settings-pair"></span> <span class="skip-symbol icon-cast_on"></span> </div></div> <div class="hidden no-model advertisement-info" tabindex="-1"> <div class="advertisement-info-top"> <div class="youtube-hosted"> <div class="advertisement-avatar no-model image" data-image-url="{{advertiserAvatar}}" tabindex="-1"></div> <div class="advertisement-info-details"> <div class="advertisement-title"></div> <div class="advertisement-advertiser"> <span class="ad-badge">Ad</span> <span class="remaining-duration"></span> <span class="ad-point-separator">•</span> <span class="ad-by">by </span> </div> </div> </div> <div class="third-party"> <span class="ad-badge">Ad</span> <span class="ad-point-separator">•</span> <span class="remaining-duration"></span> </div> </div></div> <div class="no-model no-content pivot-shelf-list" tabindex="-1"> <div class="no-content-message"> <div class="text">No videos are available</div> </div><div class=" carousel" tabindex="-1"></div></div></div></div> <div id="call-to-cast" class="no-model call-to-cast" tabindex="-1"> <div class="THEME-cl end-screen multi-user left"> <h2 class="call-to-cast-text">Everyone's connected.</h2> <h3 class="call-to-cast-text">Friends and family can <em>join in</em> and add videos to your TV Queue.</h3> <div class="yt-logo"></div> </div> <div class="THEME-cl end-screen yt-mix right"> <h2 class="call-to-cast-text">Find the perfect mix.</h2> <h3 class="call-to-cast-text">Play a nonstop <em>YouTube Mix</em> inspired by your favorite artist or video.</h3> <div class="yt-logo"></div> </div> <div class="THEME-cl end-screen kids-promo left"> <h2 class="call-to-cast-text"> Have the YouTube Kids app? </h2> <h3 class="call-to-cast-text"> Get the family <em>together</em> and watch your favorite videos on the big screen. </h3> <div class="yt-kids-logo"></div> </div> <div class="THEME-cl end-screen tv-queue left"> <h2 class="call-to-cast-text">What's up next?</h2> <h3 class="call-to-cast-text">Browse and add videos to your <em>TV Queue</em> while your current video keeps playing.</h3> <div class="yt-logo"></div> </div> <div class="THEME-k end-screen kids-mother-goose left"> <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3> </div> <div class="THEME-k end-screen kids-rainbow left"> <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3> </div> <div class="THEME-k end-screen kids-sesame left"> <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3> </div> <div class="THEME-k end-screen kids-talking-tom left"> <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3> </div> <div class="THEME-k end-screen kids-wonderquest left"> <h3 class="call-to-cast-text">Tap a video to watch on your TV.</h3> </div> <div class="THEME-g end-screen gaming-heart left"> <h3 class="call-to-cast-text"></h3> </div> <div class="THEME-up end-screen loki left"> <h3 class="call-to-cast-text">Pick a video, yo.</h3> </div> <div class="THEME-m end-screen music-ready"> <div class="call-to-cast-logo"></div> <h2 class="call-to-cast-text">Ready to play</h2> <h3 class="call-to-cast-text">Choose some music in YouTube Music and play it here</h3> </div> <div class="THEME-m end-screen music-party"> <div class="call-to-cast-logo"></div> <h3 class="call-to-cast-text">Need a soundtrack for your party?</h3> <h3 class="call-to-cast-text">Stream endless video or audio stations to match the mood.</h3> <div class="footer"></div> </div></div> <div id="browse-sets" class="no-background browse-sets" tabindex="-1"> <div id="browse-search-bar" class="no-model icon-button" tabindex="-1"> <span class="icon icon-search"></span> <span class="label"></span></div> <div class="youtube-logo-top"> <div class="youtube-logo icon-youtube-logo"></div> <div class="youtube-unlimited-logo icon-youtube-unlimited-logo"></div> </div> <div id="browse-header" class="hidden no-model collapsed two-buttons browse-header" tabindex="-1"> <div class="browse-header-gradient"></div> <div class="browse-header-metadata"> <div class="browse-header-avatar no-model image" data-image-url="{{avatarImageURL}}" tabindex="-1"></div> <div class="title"></div> </div> <div class="browse-header-button-bar no-model component" tabindex="-1"> <div class="button browse-header-trailer no-model icon-button" tabindex="-1"> <span class="icon icon-player-play"></span> <span class="label"></span></div> <div class="button browse-header-subscribe no-model subscribe-button" tabindex="-1"> <span class="icon icon-logo-lozenge"></span> <span class="label"></span></div> </div></div> <div id="platform-user-icon" class="hidden no-model image" data-image-url="{{platformUserIcon}}" tabindex="-1"></div> <div class="browse-content"> <div id="shelves" class=" shelves" tabindex="-1"> <div class="title"></div> <div class="no-content-message"> <div class="text">No videos are available</div> </div><div class=" carousel" tabindex="-1"><div class="selected shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 1; transform: translateX(0%) translateY(0%) scale(1) translateZ(0px); transition: none 0s;"> <div class="icon "></div> <div class="title"> <span class="main">Screen Rant</span> <span class="annotation">Recommended channel</span> </div> <div class="content-container"><div class=" horizontal-list" tabindex="-1"> <div class="no-content-message"> <div class="text">No videos are available</div> </div> <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"> <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/_TWbD3MKfMI/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">7:30</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">16,573,823 views</div> <div class="age">3 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/vvFHyFW_jFc/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">7:06</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">11,425,149 views</div> <div class="age">3 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/q14aPbvbvl8/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">7:25</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">8,454,555 views</div> <div class="age">5 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/M9WlASe5ThU/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:24</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">3,804,435 views</div> <div class="age">2 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/59_zMJRhFM0/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">7:14</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">487,432 views</div> <div class="age">3 weeks ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/tnfPNYpi8rc/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">9:22</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">3,156,426 views</div> <div class="age">7 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/F50yjSws9gQ/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">5:27</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">1,108,695 views</div> <div class="age">3 weeks ago</div> </div> </div></div></div></div></div></div></div><div class=" shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 2; transform: translateX(0%) translateY(106%) scale(1) translateZ(0px); transition: none 0s;"> <div class="icon "></div> <div class="title"> <span class="main">FailArmy</span> <span class="annotation">Recommended channel</span> </div> <div class="content-container"><div class=" horizontal-list" tabindex="-1"> <div class="no-content-message"> <div class="text">No videos are available</div> </div> <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"> <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/rs-Ou-gjReQ/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">7:01</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">4,792,124 views</div> <div class="age">1 month ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/x5ZxRObLLzE/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:49</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">5,144,308 views</div> <div class="age">2 weeks ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/LZoilVdo7Hw/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">7:06</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">3,485,342 views</div> <div class="age">3 weeks ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/0vEKItRNIb0/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:54</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">KidsCat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">3,469,457 views</div> <div class="age">3 weeks ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/8VstEBbwhnc/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:52</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">4,334,756 views</div> <div class="age">1 week ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/qkKRkfZYhlE/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:37</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">3,053,167 views</div> <div class="age">2 weeks ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/MODTYlzxY9U/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:44</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">2,734,235 views</div> <div class="age">1 week ago</div> </div> </div></div></div></div></div></div></div><div class=" shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 3; transform: translateX(0%) translateY(212%) scale(1) translateZ(0px); transition: none 0s;"> <div class="icon "></div> <div class="title"> <span class="main">Cyprien</span> <span class="annotation">Recommended channel</span> </div> <div class="content-container"><div class=" horizontal-list" tabindex="-1"> <div class="no-content-message"> <div class="text">No videos are available</div> </div> <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"> <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/D-YPnDvTCmI/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">5:02</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">byby Not a Cat</div> <div class="views">9,832,315 views</div> <div class="age">1 month ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/wNRUzu4fTgw/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">11:44</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">15,035,125 views</div> <div class="age">8 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/GwzBLYGRj6c/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:32</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">10,769,981 views</div> <div class="age">4 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/rtzlT78OEks/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:32</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">12,174,818 views</div> <div class="age">4 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/eOOyxSMI0aE/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">6:32</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">11,402,149 views</div> <div class="age">5 months ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/RL7grUEo960/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">4:50</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">27,077,657 views</div> <div class="age">1 year ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/2A07xMhKC6g/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">5:55</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">11,230,070 views</div> <div class="age">6 months ago</div> </div> </div></div></div></div></div></div></div><div class=" shelf" tabindex="-1" style="height: 24em; opacity: 1; z-index: 3; transform: translateX(0%) translateY(212%) scale(1) translateZ(0px); transition: none 0s;"> <div class="icon "></div> <div class="title"> <span class="main">Recently Uploaded</span> <span class="annotation">Recommended videos</span> </div> <div class="content-container"><div class=" horizontal-list" tabindex="-1"> <div class="no-content-message"> <div class="text">No videos are available</div> </div> <div class="content"><div class=" sliding-highlighter" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"> <div class="select">Select</div></div><div class=" carousel" tabindex="-1"><div class="item tile selected video-tile" tabindex="-1" style="transform: translateX(0%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/Z31LDqbhN8U/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">10:23</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">23,123 views</div> <div class="age">5 days ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(107%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/zzmrTdAtEu4/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">14:09</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">23,595 views</div> <div class="age">3 days ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(214%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/1dXVzBU5p-Q/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">14:26</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">53,711 views</div> <div class="age">6 days ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(321%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/spC883rn6zk/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">17:41</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">62,903 views</div> <div class="age">5 days ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(428%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/XilhAJZ2qxs/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">11:46</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">37,470 views</div> <div class="age">2 days ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(535%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/tCehxI5a1y0/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">10:28</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">9,132 views</div> <div class="age">2 days ago</div> </div> </div></div><div class="item tile video-tile" tabindex="-1" style="transform: translateX(642%) translateZ(0px); transition: none 0s;"><div class="no-model tile-focus-target" tabindex="-1"></div> <div class="tile-top"> <div class="video-thumb no-model image" data-image-url="{{model.imageUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/vi/qrZcKwcVwk8/hqdefault.jpg);"></div> <div class="voice-command">Cat Video</div> <div class="decoration"> <div class="live-badge badge hidden"></div> <div class="text-badge badge hidden"></div> <div class="duration">8:43</div> </div> </div> <div class="overlay hidden"> <div class="count"><div><strong></strong></div>videos</div> <div class="icon"></div> </div> <div class="tile-bottom"> <div class="title">Cat Video</div> <div class="details"> <div class="by">by Not a Cat</div> <div class="views">23,568 views</div> <div class="age">3 days ago</div> </div> </div></div></div></div></div></div></div></div></div> </div></div> <div id="settings-placeholder"></div> <div id="search" class="hidden no-model search" tabindex="-1"> <div class="youtube-logo-top"> <div class="youtube-logo icon-youtube-logo"></div> <div class="youtube-unlimited-logo icon-youtube-unlimited-logo"></div> </div> <div class="controls"> <div id="text-box-background"> <div id="search-text-box"> <span class="icon-search"></span> <input id="search-input" autocomplete="off" class="no-model component" title="search" placeholder="Search..." tabindex="-1"> <span id="search-query" class="hidden"></span> </div> </div> <div id="search-text-entry"> <div class="suggestions-container"> <div id="keyboard-icon" class="icon-search-keyboard"></div> <div id="search-suggestions" class=" suggestions" tabindex="-1"> <div id="suggest-list" class=" list" data-model="{{model.suggestions}}" data-catch-mouse-move="{{catchMouseMove}}" data-scroll-on-focus="true" tabindex="-1"></div></div> </div> <div id="search-keyboard" class=" keyboard" tabindex="-1"> <div id="transliteration-container"> <div id="transliteration" class="no-model transliteration" tabindex="-1"> <div class=" list" data-model="{{transliterations}}" tabindex="-1"> </div></div> </div> <div id="keyboard-grid" class=" grid" tabindex="-1"> <div class="selected list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">a</span></div><div class=" button" tabindex="-1"><span class="label">b</span></div><div class=" button" tabindex="-1"><span class="label">c</span></div><div class=" button" tabindex="-1"><span class="label">d</span></div><div class=" button" tabindex="-1"><span class="label">e</span></div><div class=" button" tabindex="-1"><span class="label">f</span></div><div class=" button" tabindex="-1"><span class="label">g</span></div><div class="icon-key-delete button" tabindex="-1"><span class="label"></span></div></div><div class=" list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">h</span></div><div class=" button" tabindex="-1"><span class="label">i</span></div><div class=" button" tabindex="-1"><span class="label">j</span></div><div class=" button" tabindex="-1"><span class="label">k</span></div><div class=" button" tabindex="-1"><span class="label">l</span></div><div class=" button" tabindex="-1"><span class="label">m</span></div><div class=" button" tabindex="-1"><span class="label">n</span></div><div class="clear-query-tile button" tabindex="-1"><span class="label">Clear</span></div></div><div class=" list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">o</span></div><div class=" button" tabindex="-1"><span class="label">p</span></div><div class=" button" tabindex="-1"><span class="label">q</span></div><div class=" button" tabindex="-1"><span class="label">r</span></div><div class=" button" tabindex="-1"><span class="label">s</span></div><div class=" button" tabindex="-1"><span class="label">t</span></div><div class=" button" tabindex="-1"><span class="label">u</span></div><div class="numbers-toggle-tile button" tabindex="-1"><span class="label">&123</span></div></div><div class=" list" data-catch-mouse-move="{{catchRowMouseMove}}" data-item-factory="{{itemFactory}}" data-item-name="{{itemName}}" data-is-vertical="false" data-loop="{{loopRows}}" data-consume-events="{{consumeEvents}}" data-rate-limit="{{rateLimit}}" tabindex="-1"><div class="selected button" tabindex="-1"><span class="label">v</span></div><div class=" button" tabindex="-1"><span class="label">w</span></div><div class=" button" tabindex="-1"><span class="label">x</span></div><div class=" button" tabindex="-1"><span class="label">y</span></div><div class=" button" tabindex="-1"><span class="label">z</span></div><div class=" button" tabindex="-1"><span class="label">-</span></div><div class=" button" tabindex="-1"><span class="label">'</span></div></div></div> <div id="letter-suggest" class=" list" data-is-vertical="true" data-catch-mouse-move="true" data-model="{{letterSuggestions}}" tabindex="-1"></div> <div> <div id="keyboard-spacebar" class="icon-key-space button" tabindex="-1"><span class="label"></span></div> </div></div> <div class="search-hint"> Voice search is not supported. </div> </div> </div> <div class="search-pairing"> <div class="search-img"></div> <div class="search-message"> <div class="title">Search Faster</div> <div class="pairing no-model dial-upsell pairing-dialog" id="pairing" tabindex="-1"> <div class="dialog-large-icon icon-settings-pair"></div> <div class="connection-instructions icon-dialog-content"> <div class="dial-upsell-content"> Connect one or more devices to the same Wi-Fi network and select <div class="cast-icon"> </div> </div> <div class="manual-connect-content"> <div class="connection-steps"> <div class="with-dial-connect-step1"> <div class="step1">Or go to</div> <div class="pair-url">youtube.com/pair</div> </div> <div class="no-dial-connect-step1"> <div class="step1">Go to</div> <div class="pair-url">youtube.com/pair</div> </div> <div class="no-dial-connect-step2"> <div class="step2">and enter</div> <div class="pair-code">Loading...</div> </div> </div> </div> </div></div> </div> </div> <div id="results-placeholder"></div></div> <div id="pointer-overlay" class="-overlay hidden"></div> <div id="guide" class="focused guide" tabindex="-1"> <div id="user-info-background"> <div class="user-info-container"> <div id="guide-user-avatar" style="background-image: url()"></div> <div class="guide-user-text"> <div class="guide-user-name"></div> <div class="guide-user-unlimited"></div> </div> </div> </div> <div class="collapsed-guide"></div> <div class="guide-carousel-background"></div> <div class="collapsed-guide-icons"> <div class="collapsed-guide-icon icon-guide-what-to-watch"></div> <div class="collapsed-guide-icon icon-guide-my-subs"></div> <div class="collapsed-guide-icon icon-popular"></div> <div class="collapsed-guide-icon icon-music"></div> <div class="collapsed-guide-icon icon-ellipsis"></div> </div> <div id="error-message">Sorry, the rest of this Guide isn’t available right now.</div><div class=" sliding-highlighter" tabindex="-1" style="transform: translateY(200%) translateZ(0px); transition: opacity 200ms cubic-bezier(0.4, 0, 0.2, 1), -webkit-transform 200ms cubic-bezier(0.4, 0, 0.2, 1);"> <div class="select">Select</div></div><div class="focused carousel" tabindex="-1"><div class=" guide-button" tabindex="-1" style="transform: translateY(0%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon icon-people"> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div> </div> <div class="guide-button-title">Sign In</div></div><div class=" guide-button" tabindex="-1" style="transform: translateY(100%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon icon-search"> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div> </div> <div class="guide-button-title">Search</div></div><div class="focused selected guide-button" tabindex="-1" style="transform: translateY(200%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon icon-guide-what-to-watch"> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div> </div> <div class="guide-button-title">Home</div></div><div class=" guide-button" tabindex="-1" style="transform: translateY(300%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon icon-player-settings"> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div> </div> <div class="guide-button-title">Settings</div></div><div class="disabled guide-button" tabindex="-1" style="transform: translateY(400%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1"></div> </div> <div class="guide-button-title">Best of YouTube</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(500%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/F0pVplsI8R5kcAqgtoRqoA/1.jpg);"></div> </div> <div class="guide-button-title">Popular on YouTube</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(600%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/-9-kyTW8ZkZNDHQJ6FgpwQ/1.jpg);"></div> </div> <div class="guide-button-title">Music</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(700%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/Egdi0XIXXZ-qJOFPf4JSKw/1.jpg);"></div> </div> <div class="guide-button-title">Sports</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(800%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/OpNcN46UbXVtpKMrmU4Abg/1.jpg);"></div> </div> <div class="guide-button-title">Gaming</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(900%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/YfdidRxbB8Qhf0Nx7ioOYw/1.jpg);"></div> </div> <div class="guide-button-title">News</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1000%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/4R8DWoMoI7CAwX8_LjQHig/1.jpg);"></div> </div> <div class="guide-button-title">Live</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1100%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg);"></div> </div> <div class="guide-button-title">Spotlight</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1200%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/xAgnFbkxldX6YUEvdcNjnA/1.jpg);"></div> </div> <div class="guide-button-title">Film & Animation</div></div><div class="has-image guide-button" tabindex="-1" style="transform: translateY(1300%) translateZ(0px); transition: none 0s;"> <div class="guide-button-icon "> <div class="no-model image" data-image-url="{{model.iconUrl}}" tabindex="-1" style="background-image: url(i.ytimg.com/i/i-g4cjqGV7jvU8aeSuj0jQ/1.jpg);"></div> </div> <div class="guide-button-title">Entertainment</div></div></div></div> <div class="no-model application-message" tabindex="-1"></div> <div id="spinner" class="hidden no-model spinner" tabindex="-1"> <div class="fallback-loading-indicator">LOADING...</div> <div class="loading-indicator"> <div class="dot" id="dot1"></div> <div class="dot" id="dot2"></div> <div class="dot" id="dot3"></div> <div class="dot" id="dot4"></div> <div class="dot" id="dot5"></div> <div class="dot" id="dot6"></div> <div class="dot" id="dot7"></div> <div class="dot" id="dot8"></div> </div></div> <h1 class=" debug-watermark" tabindex="-1"></h1> <div class="browse-sets no-model dialog" id="dialog" tabindex="-1"> <div id="dialog-wrapper"> <div class="dialog-icon"></div> <!-- Only used for flat UI --> <div class="dialog-contents"> <div class="header"> <div class="title"></div> </div> <div class="no-model component" id="dialog-view" tabindex="-1"></div> <div class="buttons"> <div id="dialog-cancel-button" class="no-model button" tabindex="-1"><span class="label"></span></div> <div id="dialog-ok-button" class="no-model button" tabindex="-1"><span class="label"></span></div> </div> </div> </div></div> <div id="voice-footer-placeholder"></div> <div id="legend" class="close-guide search legend" tabindex="-1"> <div class="more no-model legend-item" tabindex="-1"> <span class="icon icon-player-more"></span> <span class="title">Show More</span></div> <div class="back no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Go Back</span></div> <div class="exit no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Exit</span></div> <div class="reversed-back no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Go Back</span></div> <div class="search no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Search</span></div> <div class="space no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Space</span></div> <div class="home no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Go Home</span></div> <div class="modify no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Modify</span></div> <div class="delete no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Delete</span></div> <div class="guide no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Open Guide</span></div> <div class="close-guide no-model legend-item" tabindex="-1"> <span class="icon "></span> <span class="title">Close Guide</span></div></div> <div class=" toaster" tabindex="-1"> <div class=" list" data-model="{{model}}" tabindex="-1"></div></div> <div class="no-model engagement-indicator" tabindex="-1"></div> <div class=" hidden" id="snap-controls" data-is-hidden="true"></div> <div id="context-menu-placeholder" class="hidden"></div> <div class="hidden no-model fps" tabindex="-1"></div></div></div> - - - - -<div id="window-resizer-tooltip"><a href="#" title="Edit settings"></a><span class="tooltipTitle">Window size: </span><span class="tooltipWidth" id="winWidth"></span> x <span class="tooltipHeight" id="winHeight"></span><br><span class="tooltipTitle">Viewport size: </span><span class="tooltipWidth" id="vpWidth"></span> x <span class="tooltipHeight" id="vpHeight"></span></div></body></html>
diff --git a/src/cobalt/layout_tests/testdata/benchmarks/yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg b/src/cobalt/layout_tests/testdata/benchmarks/yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg deleted file mode 100644 index 56b34fe..0000000 --- a/src/cobalt/layout_tests/testdata/benchmarks/yt3.ggpht.com/-dL2jeHlm2Ok/AAAAAAAAAAI/AAAAAAAAAAA/ZCMMkRj-hrw/s88-c-k-no/photo.jpg +++ /dev/null Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline-expected.png new file mode 100644 index 0000000..4afe5c9 --- /dev/null +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline-expected.png Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline.html b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline.html new file mode 100644 index 0000000..ec8d3a2 --- /dev/null +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-baseline.html
@@ -0,0 +1,181 @@ +<!DOCTYPE html> +<!-- + | Combined tests for basic functionality of CSS Flexible Box Layout Module. + | https://www.w3.org/TR/css-flexbox-1 + --> +<html> +<head> +<style> + body { + margin: 0px; + font-family: Roboto; + background-color: #808080; + font-size: 12px; + } + .vsized { + height: 38px; + } + .flex { + display: flex; + color: #99b9f3; + background-color: #ffee00; + opacity: 0.75; + } + .inlineflex { + display: inline-flex; + color: #99b9f3; + background-color: #ffee01; + opacity: 0.75; + } + .row { + flex-flow: row wrap; + } + .column { + flex-flow: column wrap; + } + .container { + overflow: hidden; + min-width: 2px; + padding: 2px; + border: 2px solid #000060; + outline: 2px solid #00f000; + margin: 6px; + border-bottom-width: 10px; + } + .item { + flex: 1 1 50px; + /* blue */ + margin: 1px; + order: 0; + } + div > span { + background-color: #0047ab; + } +</style> +</head> +<body> +<div> + +-hg +<div class="vsized inlineflex row container"> + <span style="align-self: flex-end;">end</span> + <span style="align-self: flex-start;">start</span> + <span style="align-self: center;">center</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg-hg +<div class="vsized inlineflex row container"> + <span style="align-self: center;">center</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: flex-start;">start</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg-hg +<div class="vsized inlineflex row container"> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg- +</div><div> +-hg +<div class="vsized inlineflex row container"> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span style="align-self: baseline;">hg</span> + <span style="margin-top: auto; font-size: 2em; align-self: baseline;">hg</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg-hg +<div class="vsized inlineflex row container"> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span style="margin-top: auto; font-size: 2em; align-self: baseline;">hg</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg-hg +<div class="vsized inlineflex row container"> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span style="align-self: baseline;">hg</span> + <span style="font-size: 2em; align-self: baseline;">hg</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg- +</div><div> +-hg +<div class="vsized inlineflex row container"> + <span style="align-self: baseline;">hg</span> + <span style="font-size: 2em; align-self: baseline;">hg</span> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg-hg +<div class="vsized inlineflex row container"> + <span style="font-size: 2em; align-self: baseline;">hg</span> + <span style="align-self: baseline;">hg</span> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg-hg +<div class="vsized inlineflex row container"> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span class="vsized" style="align-self: stretch;">stretch</span> + <span style="font-size: 2em; align-self: baseline;">hg</span> + <span style="align-self: baseline;">hg</span> +</div> +hg- +</div><div> +-hg +<div class="vsized inlineflex row container"> + <span style="display: inline-block; align-self: center; width: 10px; height: 20px;"></span> + <span style="align-self: flex-start;">start</span> + <span style="align-self: flex-end;">end</span> + <span style="align-self: center;">center</span> + <span class="vsized" style="align-self: stretch;">stretch</span> +</div> +hg-hg +<div class="vsized inlineflex row container"> +</div> +hg-hg +<div class="vsized inlineflex row container"> + <span></span> +</div> +hg-hg +<div class="vsized inlineflex column container"> + <span style="display: inline-block; width: 10px; height: 10px;"></span> + <span style="display: inline-block; width: 10px; height: 10px;"></span> + <span style="display: inline-block; width: 10px; height: 10px;"></span> +</div> +hg-hg +<div class="vsized inlineflex column container"> + <span style="display: inline-block; width: 10px; height: 30px;"></span> +</div> +hg-hg +<div class="vsized inlineflex column container"> + <span style="display: inline-block; width: 10px; height: 10px;"></span> +</div> +hg-hg +<div class="vsized inlineflex column container"> + <span></span> +</div> +hg-hg +<div class="vsized inlineflex column container"> +</div> +hg- + +</div> + +</body> +</html> +
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png index a755805..cbf7803 100644 --- a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-positioning-tests-expected.png Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content-expected.png new file mode 100644 index 0000000..010813f --- /dev/null +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content-expected.png Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content.html b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content.html new file mode 100644 index 0000000..128a8f0 --- /dev/null +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-shrinking-and-justify-content.html
@@ -0,0 +1,271 @@ +<!DOCTYPE html> +<!-- + | Combined tests for basic functionality of CSS Flexible Box Layout Module. + | https://www.w3.org/TR/css-flexbox-1 + | This test focuses on shrinking flex items and justify-content values. + --> +<html> +<head> +<style> + body { + margin: 0px; + font-family: Roboto; + background-color: #808080; + font-size: 12px; + } + .inlineflex { + display: inline-flex; + color: #99b9f3; + background-color: #ffee08; + opacity: 0.75; + } + .flex { + display: flex; + color: #99b9f3; + background-color: #ffee08; + opacity: 0.75; + } + + .widesized { + width: 100px; + height: 10px; + -no-margin-left: auto; + } + .sized { + width: 50px; + height: 10px; + } + .container { + flex-flow: row nowrap; + padding: 1px; + border: 1px solid #000060; + outline: 1px solid #00f000; + margin: 3px; + } + .flex-end { + justify-content: flex-end; + align-items: center; + align-content: center; + } + .center { + justify-content: center; + align-items: center; + align-content: center; + } + .space-between { + justify-content: space-between; + align-items: center; + align-content: center; + } + .center { + justify-content: center; + align-items: center; + align-content: center; + } + .space-around { + justify-content: space-around; + align-items: center; + align-content: center; + } + .blue { + background-color: #0047ab; + } + .red { + background-color: red; + } + .hidden { + overflow: hidden; + } + .visible { + overflow: visible; + } + .shrink-1 { + flex-shrink: 1; + } + .shrink-0-5 { + flex-shrink: 0.5; + } + .shrink-0-25 { + flex-shrink: 0.25; + } + .basis-0 { + flex-basis: 0; + } + .basis-big { + flex-basis: 100px; + } + +</style> +</head> +<body> +<div style="display:inline-block; margin: 0 5px 0 40px; width: 50px;"> + +<div class="sized flex flex-end container"> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex flex-end container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex flex-end container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex flex-end container"> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex flex-end container"> + <div class="red widesized shrink-0-5"></div> + <div class="blue widesized shrink-0-25"></div> +</div> + +<div class="sized flex flex-end container"> + <div class="red widesized shrink-0-5 basis-big"></div> + <div class="blue widesized shrink-0-25 basis-big"></div> +</div> + +flex-end +</div> +<div style="display:inline-block; margin: 0 55px 0 0; width: 50px;"> + +<div class="sized flex container"> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex container"> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex container"> + <div class="red widesized shrink-0-5"></div> + <div class="blue widesized shrink-0-25"></div> +</div> + +<div class="sized flex container"> + <div class="red widesized shrink-0-5 basis-big"></div> + <div class="blue widesized shrink-0-25 basis-big"></div> +</div> + +flex-start +</div> +<div style="display:inline-block; margin: 0 0 0 5px; width: 75px;"> + + +<div class="sized flex space-around container"> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex space-around container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex space-around container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex space-around container"> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex space-around container"> + <div class="red widesized shrink-0-5"></div> + <div class="blue widesized shrink-0-25"></div> +</div> + +<div class="sized flex space-around container"> + <div class="red widesized shrink-0-5 basis-big"></div> + <div class="blue widesized shrink-0-25 basis-big"></div> +</div> + + +space-around +</div> +<div style="display:inline-block; margin: 0 0 0 15px; width: 75px;"> + + +<div class="sized flex center container"> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex center container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex center container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex center container"> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex center container"> + <div class="red widesized shrink-0-5"></div> + <div class="blue widesized shrink-0-25"></div> +</div> + +<div class="sized flex center container"> + <div class="red widesized shrink-0-5 basis-big"></div> + <div class="blue widesized shrink-0-25 basis-big"></div> +</div> + + +center +</div> +<div style="display:inline-block; margin: 0 0 0 5px; width: 90px;"> + + + +<div class="sized flex space-between container"> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex space-between container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex space-between container"> + <div class="red widesized shrink-1"></div> + <div class="blue widesized shrink-1"></div> +</div> + +<div class="sized flex space-between container"> + <div class="blue widesized shrink-0-5"></div> +</div> + +<div class="sized flex space-between container"> + <div class="red widesized shrink-0-5"></div> + <div class="blue widesized shrink-0-25"></div> +</div> + +<div class="sized flex space-between container"> + <div class="red widesized shrink-0-5 basis-big"></div> + <div class="blue widesized shrink-0-25 basis-big"></div> +</div> + + +space-between +</div> + +</body> +</html> +
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png index 1475746..881adc4 100644 --- a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages-expected.png Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html index 6319586..5629e51 100644 --- a/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/combined-with-baselines-percentages.html
@@ -22,7 +22,7 @@ height: 40px; } .small { - width: 100px; + width: 30px; min-height: 40px; } .flex { @@ -83,56 +83,113 @@ <span class="blue" style="flex-basis: 20%; margin: 0px; border: 0px; padding: 0px; align-self:center;">WWWW</span> <span class="blue" style="flex-basis: 95%; margin: 0px; border: 0px; padding: 0px; align-self:center;">XXXX</span> </div> -[5] - -(1) +gbHO- <div class="small inlineflex container"> <span class="blue" style="flex-basis: 20%;">a</span> </div> -(2a) <div class="inlineflex container"> <span class="blue">AAa</span> </div> -(2b) <div class="inlineflex container"> <span class="blue" style="overflow:hidden; flex-basis: 20px;">AAb</span> </div> -(2c) <div class="inlineflex container"> <span class="blue" style="overflow:hidden; flex-basis: 20px; max-width:21px;">AAc</span> </div> -(3) <div class="inlineflex container green"> <div class="inlineflex container"> - <span class="blue" style="overflow:hidden; flex-basis: 50%;">DDD</span> + <span class="blue" style="overflow:hidden; flex-basis: 50%;">DDh</span> </div> </div> -(4a) +<div class="inlineflex container green"> +<div class="inlineflex container"> + <span class="blue" style="flex-basis: 50%;">DDv</span> +</div> +</div> <div class="vsized inlineflex container"> - <span class="blue" style="flex-basis: 12%;">VVVV</span> + <span class="blue" style="flex-basis: 5%;">V1V</span> </div> -(4b) <div class="vsized inlineflex container"> - <span class="blue" style="flex-basis: 12%; max-width:25px;">VVVV</span> + <span class="blue" style="flex-basis: 12%; max-width:15px;">V2V</span> </div> -(5) -<div class="vsized inlineflex container" style="min-width: 100px"> - <span class="blue" style="flex-basis: 12%; max-width:25px;">VVVV</span> +<div class="vsized inlineflex container"> + <span class="blue" style="flex-basis: 12%; max-width:70%;">V3V</span> </div> -(6) -<div class="vsized inlineflex container" style="max-width: 5px;"> +<div class="vsized inlineflex container" style="min-width: 5%"> + <span class="blue" style="flex-basis: 12%; max-width:15px;">V4V</span> +</div> +<div class="vsized inlineflex container" style="width: 40px;"> + <span class="blue" style="flex-basis: 12%; max-width:15px;">V5V</span> +</div> +<div class="vsized inlineflex container" style="width: 40px;"> + <span class="blue" style="flex-basis: 12%; max-width:30%;">V6V</span> +</div> +<div class="vsized inlineflex container" style="min-width: 5%"> + <span class="blue" style="flex-basis: 12%; max-width:15px;">V7V</span> +</div> +<div class="vsized inlineflex container" style="min-width: 5%"> + <span class="blue" style="flex-basis: 12%; max-width:50%;">V8V</span> +</div> + + +<div class="vsized inlineflex container" style="max-width: 1%;"> <span class="blue">VVVV</span> </div> -(7) -<div class="vsized inlineflex container" style="max-width: 5px; overflow: visible;"> +<div class="vsized inlineflex container" style="max-width: 1%; overflow: visible;"> <span class="blue">VVVV</span> </div> -(8) +<div class="vsized inlineflex container" style="max-width: 1%;"> + <span class="blue">VVVV</span> +</div> +<div class="vsized inlineflex container" style="max-width: 1%; overflow: visible;"> + <span class="blue">VVVV</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px;"> + <span class="blue">HHHH</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;"> + <span class="blue">VVVV</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px;"> + <span class="blue" style="overflow: hidden;">HHHH</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px;"> + <span class="blue" style="overflow: visible;">HHHH</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px;"> + <span class="blue" style="min-width: 1px;">MHHM</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;"> + <span class="blue" style="min-width: 1px;">MVVM</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px;"> + <span class="blue" style="max-width: 4px; overflow: visible;">MHHM</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;"> + <span class="blue" style="max-width: 4px; overflow: visible;">MVVM</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px;"> + <span class="blue" style="max-width: 4px; overflow: hidden;">MHHM</span> +</div> + +<div class="vsized inlineflex container" style="max-width: 10px; overflow: visible;"> + <span class="blue" style="max-width: 4px; overflow: hidden;">MVVM</span> +</div> +-OHgb <div class="flex" style="flex-flow: row wrap; height:75px; "> -<div>block first</div> -<div style="position: abolute;">block abs</div> +<div>block first item</div> +<div id="item2" style="position: absolute; background-color:#FF8C00;">block abs</div> anonymous item 3 <div style="margin-left:auto; margin-right:auto">block middle</div>
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size-expected.png b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size-expected.png new file mode 100644 index 0000000..b17c1ce --- /dev/null +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size-expected.png Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size.html b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size.html new file mode 100644 index 0000000..c9dd6b7 --- /dev/null +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/content-based-minimum-size.html
@@ -0,0 +1,70 @@ +<!DOCTYPE html> +<!-- + | Combined tests for basic functionality of CSS Flexible Box Layout Module. + | https://www.w3.org/TR/css-flexbox-1 + | This test focuses on content-based minimum size. + --> +<html> +<head> +<style> + body { + margin: 0px; + font-family: Roboto; + background-color: #808080; + font-size: 12px; + } + .inlineflex { + display:inline-flex; + color: #99b9f3; + background-color: #ffee08; + opacity: 0.75; + } + .container { + overflow: hidden; + flex-flow: row wrap; + justify-content: space-around; + align-items: center; + align-content: flex-end; + min-width: 2px; + padding: 2px; + border: 2px solid #000060; + outline: 2px solid #00f000; + margin: 6px; + } + .blue { + background-color: #0047ab; + } + .hidden { + overflow: hidden; + } + .visible { + overflow: visible; + } + +</style> +</head> +<body> + +<div class="inlineflex container" style="max-width: 20px;"> + <span class="blue">HHHHH</span> +</div> + +<div class="visible inlineflex container" style="max-width: 20px;"> + <span class="blue">VVVVV</span> +</div> + +<div class="visible inlineflex container" style="max-width: 20px;"> + <span class="hidden blue">HHHHH</span> +</div> + +<div class="inlineflex container" style="max-width: 20px;"> + <span class="blue" style="min-width: 5px;">mHHHm</span> +</div> + +<div class="visible inlineflex container" style="max-width: 20px;"> + <span class="blue" style="min-width: 5px;">mVVVm</span> +</div> + +</body> +</html> +
diff --git a/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt b/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt index 759ff0c..da59b48 100644 --- a/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt +++ b/src/cobalt/layout_tests/testdata/css3-flexbox/layout_tests.txt
@@ -1,3 +1,6 @@ +combined-baseline combined-order-and-multiline combined-positioning-tests +combined-shrinking-and-justify-content combined-with-baselines-percentages +content-based-minimum-size
diff --git a/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false-expected.png b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false-expected.png new file mode 100644 index 0000000..3388bb1 --- /dev/null +++ b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false-expected.png Binary files differ
diff --git a/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false.html b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false.html new file mode 100644 index 0000000..86dace5 --- /dev/null +++ b/src/cobalt/layout_tests/testdata/intersection-observer/intersection-ratio-is-nonzero-but-is-intersecting-is-false.html
@@ -0,0 +1,69 @@ +<!DOCTYPE html> +<!-- + | This test checks that an IntersectionObserverEntry's |isIntersecting| + | property is set to false if its |intersectionRatio| > 0 but + | |intersectionRatio| < all of the IntersectionObserver's threshold values. + | The target element is initially yellow, and only turns blue if the + | IntersectionObserver correctly computes the |isIntersecting| and + | |intersectionRatio| fields as described above. + | https://www.w3.org/TR/intersection-observer/ + --> +<html> +<head> + <style> + #target { + background-color: yellow; + width: 200px; + height: 150px; + position: absolute; + left: -100px; + top: -75px; + } + </style> +</head> +<body> + <div> + <div id="target"> + </div> + </div> + + <script> + if (window.testRunner) { + window.testRunner.waitUntilDone(); + } + + window.addEventListener("load", function() { + var targetElement = document.querySelector('#target'); + var expectedRatio = 0.25; + + function handleIntersect(entries, observer) { + entries.forEach(function(entry) { + console.log(entry.intersectionRatio); + if (entry.intersectionRatio == expectedRatio && !entry.isIntersecting) { + entry.target.style.backgroundColor = "blue"; + } + }); + } + + function createObserver() { + var options = { + root: null, + rootMargin: "0px", + threshold: 0.5 + }; + + var observer = new IntersectionObserver(handleIntersect, options); + observer.observe(targetElement); + } + + createObserver(); + + if (window.testRunner) { + window.testRunner.DoNonMeasuredLayout(); + window.setTimeout(function() { window.testRunner.notifyDone(); }, 0); + } + }); + </script> + +</body> +</html>
diff --git a/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt b/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt index 8962d98..f449fdd 100644 --- a/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt +++ b/src/cobalt/layout_tests/testdata/intersection-observer/layout_tests.txt
@@ -1,5 +1,6 @@ element-in-containing-block-chain-has-overflow-clip-with-padding-and-border element-in-containing-block-chain-has-overflow-clip-without-padding-or-border +intersection-ratio-is-nonzero-but-is-intersecting-is-false multiple-observers-with-different-roots-and-targets no-intersection-when-root-is-not-in-containing-block-chain-of-target observers-should-update-when-elements-move
diff --git a/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt b/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt index 64d65f0..f500a93 100644 --- a/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt +++ b/src/cobalt/layout_tests/testdata/web-platform-tests/XMLHttpRequest/web_platform_tests.txt
@@ -152,7 +152,7 @@ # SyntaxError: Unexpected EOF # js_error: send-entity-body-document.htm,FAIL send-entity-body-empty.htm,FAIL -# TODO[johnx]: re-enable this after Cobalt wpt refactoring. +# TODO: re-enable this after Cobalt wpt refactoring. send-entity-body-get-head-async.htm,PASS send-entity-body-get-head.htm,FAIL send-entity-body-none.htm,FAIL
diff --git a/src/cobalt/loader/fetcher.h b/src/cobalt/loader/fetcher.h index 1bc7010..152d790 100644 --- a/src/cobalt/loader/fetcher.h +++ b/src/cobalt/loader/fetcher.h
@@ -74,33 +74,23 @@ }; // Concrete Fetcher subclass should start fetching immediately in constructor. - explicit Fetcher(Handler* handler) - : handler_(handler), did_fail_from_transient_error_(false) {} - - const Origin& last_url_origin() const { return last_url_origin_; } - - bool did_fail_from_transient_error() const { - return did_fail_from_transient_error_; - } + explicit Fetcher(Handler* handler) : handler_(handler) {} // Concrete Fetcher subclass should cancel fetching in destructor. virtual ~Fetcher() = 0; - protected: - Handler* handler() const { return handler_; } - - void SetLastUrlOrigin(const Origin& origin) { last_url_origin_ = origin; } - void SetFailedFromTransientError() { did_fail_from_transient_error_ = true; } - - private: - Handler* handler_; - // Indicates whether the resource is cross-origin. - Origin last_url_origin_; + virtual Origin last_url_origin() const { return Origin(); } // Whether or not the fetcher failed from an error that is considered // transient, indicating that the same fetch may later succeed. - bool did_fail_from_transient_error_; + virtual bool did_fail_from_transient_error() const { return false; } + + protected: + Handler* handler() const { return handler_; } + + private: + Handler* handler_; }; } // namespace loader
diff --git a/src/cobalt/loader/fetcher_cache.cc b/src/cobalt/loader/fetcher_cache.cc index e07ba47..9b0244f 100644 --- a/src/cobalt/loader/fetcher_cache.cc +++ b/src/cobalt/loader/fetcher_cache.cc
@@ -21,36 +21,47 @@ namespace cobalt { namespace loader { +namespace { -class FetcherCache::CachedFetcherHandler : public Fetcher::Handler { +// Wraps a Fetcher::Handler and saves all data fetched and its associated +// information. +class CachedFetcherHandler : public Fetcher::Handler { public: typedef base::Callback<void( - CachedFetcherHandler* handler, const std::string& url, + const std::string& url, const scoped_refptr<net::HttpResponseHeaders>& headers, - const Origin& last_url_origin, std::string* data)> + const Origin& last_url_origin, bool did_fail_from_transient_error, + std::string* data)> SuccessCallback; - typedef base::Callback<void(CachedFetcherHandler* handler)> FailureCallback; CachedFetcherHandler(const std::string& url, Fetcher::Handler* handler, - const SuccessCallback& on_success_callback, - const FailureCallback& on_failure_callback) + const SuccessCallback& on_success_callback) : url_(url), handler_(handler), - on_success_callback_(on_success_callback), - on_failure_callback_(on_failure_callback) { + on_success_callback_(on_success_callback) { DCHECK(handler_); DCHECK(!on_success_callback_.is_null()); - DCHECK(!on_failure_callback_.is_null()); + } + + // Attach a wrapping fetcher so it can be used when forwarding the callbacks. + // This ensures that the underlying handler sees the same Fetcher object in + // the callback as the one returned by CreateCachedFetcher(). + void AttachFetcher(Fetcher* wrapping_fetcher) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(!wrapping_fetcher_); + DCHECK(wrapping_fetcher); + wrapping_fetcher_ = wrapping_fetcher; } private: // From Fetcher::Handler. LoadResponseType OnResponseStarted( - Fetcher* fetcher, + Fetcher*, const scoped_refptr<net::HttpResponseHeaders>& headers) override { // TODO: Respect HttpResponseHeaders::GetMaxAgeValue(). DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - auto response = handler_->OnResponseStarted(fetcher, headers); + DCHECK(wrapping_fetcher_); + auto response = handler_->OnResponseStarted(wrapping_fetcher_, headers); if (response == kLoadResponseContinue && headers) { headers_ = headers; auto content_length = headers_->GetContentLength(); @@ -61,46 +72,120 @@ return response; } - void OnReceived(Fetcher* fetcher, const char* data, size_t size) override { + void OnReceived(Fetcher*, const char* data, size_t size) override { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(wrapping_fetcher_); data_.insert(data_.end(), data, data + size); - handler_->OnReceived(fetcher, data, size); + handler_->OnReceived(wrapping_fetcher_, data, size); } - void OnReceivedPassed(Fetcher* fetcher, - std::unique_ptr<std::string> data) override { + + void OnReceivedPassed(Fetcher*, std::unique_ptr<std::string> data) override { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + DCHECK(wrapping_fetcher_); data_.insert(data_.end(), data->begin(), data->end()); - handler_->OnReceivedPassed(fetcher, std::move(data)); + handler_->OnReceivedPassed(wrapping_fetcher_, std::move(data)); } - void OnDone(Fetcher* fetcher) override { + + void OnDone(Fetcher*) override { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - last_url_origin_ = fetcher->last_url_origin(); - handler_->OnDone(fetcher); - on_success_callback_.Run(this, url_, headers_, last_url_origin_, &data_); + DCHECK(wrapping_fetcher_); + handler_->OnDone(wrapping_fetcher_); + on_success_callback_.Run( + url_, headers_, wrapping_fetcher_->last_url_origin(), + wrapping_fetcher_->did_fail_from_transient_error(), &data_); } - void OnError(Fetcher* fetcher, const std::string& error) override { + + void OnError(Fetcher*, const std::string& error) override { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - handler_->OnError(fetcher, error); - on_failure_callback_.Run(this); + DCHECK(wrapping_fetcher_); + handler_->OnError(wrapping_fetcher_, error); } THREAD_CHECKER(thread_checker_); const std::string url_; + Fetcher* wrapping_fetcher_ = nullptr; Fetcher::Handler* const handler_; const SuccessCallback on_success_callback_; - const FailureCallback on_failure_callback_; scoped_refptr<net::HttpResponseHeaders> headers_; - Origin last_url_origin_; std::string data_; }; +// Wraps an underlying, real Fetcher for an ongoing request, so we can ensure +// that |handler_| is deleted when the Fetcher object is deleted. +class OngoingFetcher : public Fetcher { + public: + OngoingFetcher(std::unique_ptr<CachedFetcherHandler> handler, + const Loader::FetcherCreator& real_fetcher_creator) + : Fetcher(handler.get()), handler_(std::move(handler)) { + DCHECK(handler_); + handler_->AttachFetcher(this); + fetcher_ = real_fetcher_creator.Run(handler_.get()); + } + ~OngoingFetcher() override { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); } + + Origin last_url_origin() const override { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + // Some Fetchers may call callbacks inside its ctor, in such case |fetcher_| + // hasn't been assigned and a default value is returned. + return fetcher_ ? fetcher_->last_url_origin() : Origin(); + } + bool did_fail_from_transient_error() const override { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + // Some Fetchers may call callbacks inside its ctor, in such case |fetcher_| + // hasn't been assigned and a default value is returned. + return fetcher_ ? fetcher_->did_fail_from_transient_error() : false; + } + + private: + THREAD_CHECKER(thread_checker_); + + std::unique_ptr<CachedFetcherHandler> handler_; + std::unique_ptr<Fetcher> fetcher_; +}; + +// Fulfills the request directly using the data passed to ctor. +class CachedFetcher : public Fetcher { + public: + CachedFetcher(const GURL& url, + const scoped_refptr<net::HttpResponseHeaders>& headers, + const char* data, size_t size, const Origin& last_url_origin, + bool did_fail_from_transient_error, Handler* handler) + : Fetcher(handler), + last_url_origin_(last_url_origin), + did_fail_from_transient_error_(did_fail_from_transient_error) { + auto response_type = handler->OnResponseStarted(this, headers); + if (response_type == kLoadResponseAbort) { + std::string error_msg(base::StringPrintf( + "Handler::OnResponseStarted() aborted URL %s", url.spec().c_str())); + handler->OnError(this, error_msg.c_str()); + return; + } + handler->OnReceived(this, data, size); + handler->OnDone(this); + } + + Origin last_url_origin() const override { return last_url_origin_; } + bool did_fail_from_transient_error() const override { + return did_fail_from_transient_error_; + } + + private: + Origin last_url_origin_; + bool did_fail_from_transient_error_; +}; + +} // namespace + class FetcherCache::CacheEntry { public: CacheEntry(const scoped_refptr<net::HttpResponseHeaders>& headers, - const Origin& last_url_origin, std::string* data) - : headers_(headers), last_url_origin_(last_url_origin) { + const Origin& last_url_origin, bool did_fail_from_transient_error, + std::string* data) + : headers_(headers), + last_url_origin_(last_url_origin), + did_fail_from_transient_error_(did_fail_from_transient_error) { DCHECK(data); data_.swap(*data); } @@ -113,6 +198,9 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); return last_url_origin_; } + bool did_fail_from_transient_error() const { + return did_fail_from_transient_error_; + } const char* data() const { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); return data_.data(); @@ -121,33 +209,20 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); return data_.size(); } + size_t capacity() const { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + return data_.capacity(); + } private: THREAD_CHECKER(thread_checker_); scoped_refptr<net::HttpResponseHeaders> headers_; Origin last_url_origin_; + bool did_fail_from_transient_error_; std::string data_; }; -class FetcherCache::CachedFetcher : public Fetcher { - public: - CachedFetcher(const GURL& url, const FetcherCache::CacheEntry& entry, - Handler* handler) - : Fetcher(handler) { - SetLastUrlOrigin(entry.last_url_origin()); - auto response_type = handler->OnResponseStarted(this, entry.headers()); - if (response_type == kLoadResponseAbort) { - std::string error_msg(base::StringPrintf( - "Handler::OnResponseStarted() aborted URL %s", url.spec().c_str())); - handler->OnError(this, error_msg.c_str()); - return; - } - handler->OnReceived(this, entry.data(), entry.size()); - handler->OnDone(this); - } -}; - FetcherCache::FetcherCache(const char* name, size_t capacity) : capacity_(capacity), memory_size_in_bytes_( @@ -160,11 +235,6 @@ FetcherCache::~FetcherCache() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - while (!ongoing_fetchers_.empty()) { - delete *ongoing_fetchers_.begin(); - ongoing_fetchers_.erase(ongoing_fetchers_.begin()); - } - while (!cache_entries_.empty()) { delete cache_entries_.begin()->second; cache_entries_.erase(cache_entries_.begin()); @@ -206,34 +276,35 @@ auto entry = iterator->second; cache_entries_.erase(iterator); cache_entries_.insert(std::make_pair(url.spec(), entry)); - return std::unique_ptr<Fetcher>(new CachedFetcher(url, *entry, handler)); + return std::unique_ptr<Fetcher>( + new CachedFetcher(url, entry->headers(), entry->data(), entry->size(), + entry->last_url_origin(), + entry->did_fail_from_transient_error(), handler)); } - auto cached_handler = new CachedFetcherHandler( + std::unique_ptr<CachedFetcherHandler> cached_handler(new CachedFetcherHandler( url.spec(), handler, - base::Bind(&FetcherCache::OnFetchSuccess, base::Unretained(this)), - base::Bind(&FetcherCache::OnFetchFailure, base::Unretained(this))); - ongoing_fetchers_.insert(cached_handler); - return real_fetcher_creator.Run(cached_handler); + base::Bind(&FetcherCache::OnFetchSuccess, base::Unretained(this)))); + return std::unique_ptr<Fetcher>( + new OngoingFetcher(std::move(cached_handler), real_fetcher_creator)); } void FetcherCache::OnFetchSuccess( - CachedFetcherHandler* handler, const std::string& url, + const std::string& url, const scoped_refptr<net::HttpResponseHeaders>& headers, - const Origin& last_url_origin, std::string* data) { + const Origin& last_url_origin, bool did_fail_from_transient_error, + std::string* data) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(data); - auto iterator = ongoing_fetchers_.find(handler); - DCHECK(iterator != ongoing_fetchers_.end()); - if (data->size() <= capacity_) { - auto entry = new CacheEntry(headers, last_url_origin, data); - total_size_ += entry->size(); + auto entry = new CacheEntry(headers, last_url_origin, + did_fail_from_transient_error, data); + total_size_ += entry->capacity(); cache_entries_.insert(std::make_pair(url, entry)); while (total_size_ > capacity_) { DCHECK(!cache_entries_.empty()); - total_size_ -= cache_entries_.begin()->second->size(); + total_size_ -= cache_entries_.begin()->second->capacity(); delete cache_entries_.begin()->second; cache_entries_.erase(cache_entries_.begin()); --count_resources_cached_; @@ -241,18 +312,6 @@ ++count_resources_cached_; memory_size_in_bytes_ = total_size_; } - - delete *iterator; - ongoing_fetchers_.erase(iterator); -} - -void FetcherCache::OnFetchFailure(CachedFetcherHandler* handler) { - DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); - - auto iterator = ongoing_fetchers_.find(handler); - DCHECK(iterator != ongoing_fetchers_.end()); - delete *iterator; - ongoing_fetchers_.erase(iterator); } } // namespace loader
diff --git a/src/cobalt/loader/fetcher_cache.h b/src/cobalt/loader/fetcher_cache.h index 37ddf8a..32a4466 100644 --- a/src/cobalt/loader/fetcher_cache.h +++ b/src/cobalt/loader/fetcher_cache.h
@@ -42,24 +42,21 @@ void NotifyResourceRequested(const std::string& url); private: - class CachedFetcherHandler; class CacheEntry; - class CachedFetcher; std::unique_ptr<Fetcher> CreateCachedFetcher( const GURL& url, const Loader::FetcherCreator& real_fetcher_creator, Fetcher::Handler* handler); - void OnFetchSuccess(CachedFetcherHandler* handler, const std::string& url, + void OnFetchSuccess(const std::string& url, const scoped_refptr<net::HttpResponseHeaders>& headers, - const Origin& last_url_origin, std::string* data); - void OnFetchFailure(CachedFetcherHandler* handler); + const Origin& last_url_origin, + bool did_fail_from_transient_error, std::string* data); THREAD_CHECKER(thread_checker_); const size_t capacity_; size_t total_size_ = 0; - base::hash_set<CachedFetcherHandler*> ongoing_fetchers_; net::linked_hash_map<std::string, CacheEntry*> cache_entries_; base::CVal<base::cval::SizeInBytes, base::CValPublic> memory_size_in_bytes_;
diff --git a/src/cobalt/loader/net_fetcher.cc b/src/cobalt/loader/net_fetcher.cc index bbb0027..cb084a1 100644 --- a/src/cobalt/loader/net_fetcher.cc +++ b/src/cobalt/loader/net_fetcher.cc
@@ -160,7 +160,7 @@ return HandleError(msg).InvalidateThis(); } - SetLastUrlOrigin(Origin(source->GetURL())); + last_url_origin_ = Origin(source->GetURL()); } void NetFetcher::OnURLFetchComplete(const net::URLFetcher* source) { @@ -189,7 +189,7 @@ status.error() == net::ERR_CONNECTION_RESET || status.error() == net::ERR_CONNECTION_CLOSED || status.error() == net::ERR_CONNECTION_ABORTED) { - SetFailedFromTransientError(); + did_fail_from_transient_error_ = true; } std::string msg(base::StringPrintf(
diff --git a/src/cobalt/loader/net_fetcher.h b/src/cobalt/loader/net_fetcher.h index a29f899..2ab6df8 100644 --- a/src/cobalt/loader/net_fetcher.h +++ b/src/cobalt/loader/net_fetcher.h
@@ -62,6 +62,12 @@ } private: + // Fetcher interface + Origin last_url_origin() const override { return last_url_origin_; } + bool did_fail_from_transient_error() const override { + return did_fail_from_transient_error_; + } + void Start(); // Empty struct to ensure the caller of |HandleError()| knows that |this| @@ -94,6 +100,13 @@ // The request's origin. Origin origin_; + // Indicates whether the resource is cross-origin. + Origin last_url_origin_; + + // Whether or not the fetcher failed from an error that is considered + // transient, indicating that the same fetch may later succeed. + bool did_fail_from_transient_error_ = false; + DISALLOW_COPY_AND_ASSIGN(NetFetcher); };
diff --git a/src/cobalt/media/base/drm_system.cc b/src/cobalt/media/base/drm_system.cc index ea3888a..3e46a77 100644 --- a/src/cobalt/media/base/drm_system.cc +++ b/src/cobalt/media/base/drm_system.cc
@@ -26,29 +26,23 @@ DrmSystem::Session::Session( DrmSystem* drm_system -#if SB_HAS(DRM_KEY_STATUSES) , SessionUpdateKeyStatusesCallback update_key_statuses_callback #if SB_HAS(DRM_SESSION_CLOSED) , SessionClosedCallback session_closed_callback #endif // SB_HAS(DRM_SESSION_CLOSED) -#endif // SB_HAS(DRM_KEY_STATUSES) ) : drm_system_(drm_system), -#if SB_HAS(DRM_KEY_STATUSES) update_key_statuses_callback_(update_key_statuses_callback), #if SB_HAS(DRM_SESSION_CLOSED) session_closed_callback_(session_closed_callback), #endif // SB_HAS(DRM_SESSION_CLOSED) -#endif // SB_HAS(DRM_KEY_STATUSES) closed_(false) { -#if SB_HAS(DRM_KEY_STATUSES) DCHECK(!update_key_statuses_callback_.is_null()); #if SB_HAS(DRM_SESSION_CLOSED) DCHECK(!session_closed_callback_.is_null()); #endif // SB_HAS(DRM_SESSION_CLOSED) -#endif // SB_HAS(DRM_KEY_STATUSES) } DrmSystem::Session::~Session() { @@ -94,10 +88,8 @@ : wrapped_drm_system_(SbDrmCreateSystem(key_system, this, OnSessionUpdateRequestGeneratedFunc, OnSessionUpdatedFunc -#if SB_HAS(DRM_KEY_STATUSES) , OnSessionKeyStatusesChangedFunc -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 , OnServerCertificateUpdatedFunc @@ -116,25 +108,21 @@ DrmSystem::~DrmSystem() { SbDrmDestroySystem(wrapped_drm_system_); } std::unique_ptr<DrmSystem::Session> DrmSystem::CreateSession( -#if SB_HAS(DRM_KEY_STATUSES) SessionUpdateKeyStatusesCallback session_update_key_statuses_callback #if SB_HAS(DRM_SESSION_CLOSED) , SessionClosedCallback session_closed_callback #endif // SB_HAS(DRM_SESSION_CLOSED) -#endif // SB_HAS(DRM_KEY_STATUSES) ) { // NOLINT(whitespace/parens) DCHECK(message_loop_->BelongsToCurrentThread()); return std::unique_ptr<DrmSystem::Session>(new Session( this -#if SB_HAS(DRM_KEY_STATUSES) , session_update_key_statuses_callback #if SB_HAS(DRM_SESSION_CLOSED) , session_closed_callback #endif // SB_HAS(DRM_SESSION_CLOSED) -#endif // SB_HAS(DRM_KEY_STATUSES) )); // NOLINT(whitespace/parens) } @@ -304,7 +292,6 @@ ticket_to_session_update_map_.erase(session_update_iterator); } -#if SB_HAS(DRM_KEY_STATUSES) void DrmSystem::OnSessionKeyStatusChanged( const std::string& session_id, const std::vector<std::string>& key_ids, const std::vector<SbDrmKeyStatus>& key_statuses) { @@ -319,7 +306,6 @@ session->update_key_statuses_callback().Run(key_ids, key_statuses); } -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) void DrmSystem::OnSessionClosed(const std::string& session_id) { @@ -418,7 +404,6 @@ status, error_message ? std::string(error_message) : "")); } -#if SB_HAS(DRM_KEY_STATUSES) // static void DrmSystem::OnSessionKeyStatusesChangedFunc( SbDrmSystem wrapped_drm_system, void* context, const void* session_id, @@ -450,7 +435,6 @@ base::Bind(&DrmSystem::OnSessionKeyStatusChanged, drm_system->weak_this_, session_id_copy, key_ids_copy, key_statuses_copy)); } -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 // static
diff --git a/src/cobalt/media/base/drm_system.h b/src/cobalt/media/base/drm_system.h index 2b01077..819d9c9 100644 --- a/src/cobalt/media/base/drm_system.h +++ b/src/cobalt/media/base/drm_system.h
@@ -47,11 +47,9 @@ typedef base::Callback<void(SbDrmStatus status, const std::string& error_message)> SessionDidNotUpdateCallback; -#if SB_HAS(DRM_KEY_STATUSES) typedef base::Callback<void(const std::vector<std::string>& key_ids, const std::vector<SbDrmKeyStatus>& key_statuses)> SessionUpdateKeyStatusesCallback; -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) typedef base::Callback<void()> SessionClosedCallback; #endif // SB_HAS(DRM_SESSION_CLOSED) @@ -102,10 +100,8 @@ private: // Private API for |DrmSystem|. Session(DrmSystem* drm_system -#if SB_HAS(DRM_KEY_STATUSES) , SessionUpdateKeyStatusesCallback update_key_statuses_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) , SessionClosedCallback session_closed_callback @@ -116,12 +112,10 @@ update_request_generated_callback() const { return update_request_generated_callback_; } -#if SB_HAS(DRM_KEY_STATUSES) const SessionUpdateKeyStatusesCallback& update_key_statuses_callback() const { return update_key_statuses_callback_; } -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) const SessionClosedCallback& session_closed_callback() const { return session_closed_callback_; @@ -129,9 +123,7 @@ #endif // SB_HAS(DRM_SESSION_CLOSED) DrmSystem* const drm_system_; -#if SB_HAS(DRM_KEY_STATUSES) SessionUpdateKeyStatusesCallback update_key_statuses_callback_; -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) SessionClosedCallback session_closed_callback_; #endif // SB_HAS(DRM_SESSION_CLOSED) @@ -151,9 +143,7 @@ SbDrmSystem wrapped_drm_system() { return wrapped_drm_system_; } std::unique_ptr<Session> CreateSession( -#if SB_HAS(DRM_KEY_STATUSES) SessionUpdateKeyStatusesCallback session_update_key_statuses_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) , SessionClosedCallback session_closed_callback @@ -216,11 +206,9 @@ std::unique_ptr<uint8[]> message, int message_size); void OnSessionUpdated(int ticket, SbDrmStatus status, const std::string& error_message); -#if SB_HAS(DRM_KEY_STATUSES) void OnSessionKeyStatusChanged( const std::string& session_id, const std::vector<std::string>& key_ids, const std::vector<SbDrmKeyStatus>& key_statuses); -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 void OnServerCertificateUpdated(int ticket, SbDrmStatus status, const std::string& error_message); @@ -253,12 +241,10 @@ int session_id_length, bool succeeded); #endif // SB_API_VERSION >= 10 -#if SB_HAS(DRM_KEY_STATUSES) static void OnSessionKeyStatusesChangedFunc( SbDrmSystem wrapped_drm_system, void* context, const void* session_id, int session_id_size, int number_of_keys, const SbDrmKeyId* key_ids, const SbDrmKeyStatus* key_statuses); -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_HAS(DRM_SESSION_CLOSED) static void OnSessionClosedFunc(SbDrmSystem wrapped_drm_system, void* context,
diff --git a/src/cobalt/media/base/starboard_utils.cc b/src/cobalt/media/base/starboard_utils.cc index 60c6109..9926a4e 100644 --- a/src/cobalt/media/base/starboard_utils.cc +++ b/src/cobalt/media/base/starboard_utils.cc
@@ -100,7 +100,6 @@ audio_sample_info.block_alignment = 4; audio_sample_info.bits_per_sample = audio_decoder_config.bits_per_channel(); -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) audio_sample_info.audio_specific_config_size = static_cast<uint16_t>(audio_decoder_config.extra_data().size()); if (audio_sample_info.audio_specific_config_size == 0) { @@ -109,16 +108,6 @@ audio_sample_info.audio_specific_config = &audio_decoder_config.extra_data()[0]; } -#else // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) - audio_sample_info.audio_specific_config_size = static_cast<uint16_t>( - std::min(audio_decoder_config.extra_data().size(), - sizeof(audio_sample_info.audio_specific_config))); - if (audio_sample_info.audio_specific_config_size > 0) { - SbMemoryCopy(audio_sample_info.audio_specific_config, - &audio_decoder_config.extra_data()[0], - audio_sample_info.audio_specific_config_size); - } -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) return audio_sample_info; }
diff --git a/src/cobalt/media/formats/mp4/mp4_stream_parser.cc b/src/cobalt/media/formats/mp4/mp4_stream_parser.cc index 8271529..e4d7754 100644 --- a/src/cobalt/media/formats/mp4/mp4_stream_parser.cc +++ b/src/cobalt/media/formats/mp4/mp4_stream_parser.cc
@@ -203,7 +203,7 @@ const SampleDescription& samp_descr = track->media.information.sample_table.description; - // TODO(strobe): When codec reconfigurations are supported, detect and send + // TODO: When codec reconfigurations are supported, detect and send // a codec reconfiguration for fragments using a sample description index // different from the previous one size_t desc_idx = 0; @@ -337,7 +337,7 @@ return false; } - // TODO(strobe): Recover correct crop box + // TODO: Recover correct crop box gfx::Size coded_size(entry.width, entry.height); gfx::Rect visible_rect(coded_size); @@ -459,7 +459,7 @@ void MP4StreamParser::OnEncryptedMediaInitData( const std::vector<ProtectionSystemSpecificHeader>& headers) { - // TODO(strobe): ensure that the value of init_data (all PSSH headers + // TODO: ensure that the value of init_data (all PSSH headers // concatenated in arbitrary order) matches the EME spec. // See https://www.w3.org/Bugs/Public/show_bug.cgi?id=17673. size_t total_size = 0;
diff --git a/src/cobalt/media/media_module.cc b/src/cobalt/media/media_module.cc index 2230b68..e476a6f 100644 --- a/src/cobalt/media/media_module.cc +++ b/src/cobalt/media/media_module.cc
@@ -111,23 +111,6 @@ std::vector<std::string> disabled_media_codecs_; }; -void RunClosureAndSignal(const base::Closure& closure, - base::WaitableEvent* event) { - closure.Run(); - event->Signal(); -} - -void RunClosureOnMessageLoopAndWait( - const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, - const base::Closure& closure) { - base::WaitableEvent waitable_event( - base::WaitableEvent::ResetPolicy::MANUAL, - base::WaitableEvent::InitialState::NOT_SIGNALED); - task_runner->PostTask( - FROM_HERE, base::Bind(&RunClosureAndSignal, closure, &waitable_event)); - waitable_event.Wait(); -} - } // namespace std::unique_ptr<WebMediaPlayer> MediaModule::CreateWebMediaPlayer( @@ -146,33 +129,7 @@ } void MediaModule::Suspend() { - RunClosureOnMessageLoopAndWait( - task_runner_, - base::Bind(&MediaModule::SuspendTask, base::Unretained(this))); - resource_provider_ = NULL; -} - -void MediaModule::Resume(render_tree::ResourceProvider* resource_provider) { - resource_provider_ = resource_provider; - RunClosureOnMessageLoopAndWait( - task_runner_, - base::Bind(&MediaModule::ResumeTask, base::Unretained(this))); -} - -void MediaModule::RegisterPlayer(WebMediaPlayer* player) { - RunClosureOnMessageLoopAndWait(task_runner_, - base::Bind(&MediaModule::RegisterPlayerTask, - base::Unretained(this), player)); -} - -void MediaModule::UnregisterPlayer(WebMediaPlayer* player) { - RunClosureOnMessageLoopAndWait(task_runner_, - base::Bind(&MediaModule::UnregisterPlayerTask, - base::Unretained(this), player)); -} - -void MediaModule::SuspendTask() { - DCHECK(task_runner_->BelongsToCurrentThread()); + starboard::ScopedLock scoped_lock(players_lock_); suspended_ = true; @@ -183,10 +140,14 @@ iter->first->Suspend(); } } + + resource_provider_ = NULL; } -void MediaModule::ResumeTask() { - DCHECK(task_runner_->BelongsToCurrentThread()); +void MediaModule::Resume(render_tree::ResourceProvider* resource_provider) { + starboard::ScopedLock scoped_lock(players_lock_); + + resource_provider_ = resource_provider; for (Players::iterator iter = players_.begin(); iter != players_.end(); ++iter) { @@ -199,8 +160,8 @@ suspended_ = false; } -void MediaModule::RegisterPlayerTask(WebMediaPlayer* player) { - DCHECK(task_runner_->BelongsToCurrentThread()); +void MediaModule::RegisterPlayer(WebMediaPlayer* player) { + starboard::ScopedLock scoped_lock(players_lock_); DCHECK(players_.find(player) == players_.end()); players_.insert(std::make_pair(player, false)); @@ -210,13 +171,23 @@ } } -void MediaModule::UnregisterPlayerTask(WebMediaPlayer* player) { - DCHECK(task_runner_->BelongsToCurrentThread()); +void MediaModule::UnregisterPlayer(WebMediaPlayer* player) { + starboard::ScopedLock scoped_lock(players_lock_); DCHECK(players_.find(player) != players_.end()); players_.erase(players_.find(player)); } +void MediaModule::EnumerateWebMediaPlayers( + const EnumeratePlayersCB& enumerate_callback) const { + starboard::ScopedLock scoped_lock(players_lock_); + + for (Players::const_iterator iter = players_.begin(); iter != players_.end(); + ++iter) { + enumerate_callback.Run(iter->first); + } +} + std::unique_ptr<CanPlayTypeHandler> MediaModule::CreateCanPlayTypeHandler() { return std::unique_ptr<CanPlayTypeHandler>(new CanPlayTypeHandlerStarboard); }
diff --git a/src/cobalt/media/media_module.h b/src/cobalt/media/media_module.h index 7f06370..b3ee10d 100644 --- a/src/cobalt/media/media_module.h +++ b/src/cobalt/media/media_module.h
@@ -23,9 +23,7 @@ #include "base/compiler_specific.h" #include "base/logging.h" #include "base/memory/ref_counted.h" -#include "base/message_loop/message_loop.h" #include "base/optional.h" -#include "base/threading/thread.h" #include "cobalt/math/size.h" #include "cobalt/media/can_play_type_handler.h" #include "cobalt/media/decoder_buffer_allocator.h" @@ -35,6 +33,7 @@ #include "cobalt/render_tree/image.h" #include "cobalt/render_tree/resource_provider.h" #include "cobalt/system_window/system_window.h" +#include "starboard/common/mutex.h" namespace cobalt { namespace media { @@ -57,13 +56,9 @@ MediaModule(system_window::SystemWindow* system_window, render_tree::ResourceProvider* resource_provider, const Options& options = Options()) - : thread_("media_module"), - options_(options), + : options_(options), system_window_(system_window), - resource_provider_(resource_provider) { - thread_.Start(); - task_runner_ = thread_.task_runner(); - } + resource_provider_(resource_provider) {} // Returns true when the setting is set successfully or if the setting has // already been set to the expected value. Returns false when the setting is @@ -77,6 +72,8 @@ // WebMediaPlayerFactory methods std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( WebMediaPlayerClient* client) override; + void EnumerateWebMediaPlayers( + const EnumeratePlayersCB& enumerate_callback) const override; void Suspend(); void Resume(render_tree::ResourceProvider* resource_provider); @@ -90,10 +87,6 @@ private: void RegisterDebugState(WebMediaPlayer* player); void DeregisterDebugState(); - void SuspendTask(); - void ResumeTask(); - void RegisterPlayerTask(WebMediaPlayer* player); - void UnregisterPlayerTask(WebMediaPlayer* player); SbDecodeTargetGraphicsContextProvider* GetSbDecodeTargetGraphicsContextProvider() { @@ -108,14 +101,13 @@ // paused by us. typedef std::map<WebMediaPlayer*, bool> Players; - // The thread that |players_| is accessed from, - base::Thread thread_; - scoped_refptr<base::SingleThreadTaskRunner> task_runner_; - const Options options_; system_window::SystemWindow* system_window_; cobalt::render_tree::ResourceProvider* resource_provider_; + // Protect access to the list of players. + starboard::Mutex players_lock_; + Players players_; bool suspended_ = false;
diff --git a/src/cobalt/media/player/web_media_player.h b/src/cobalt/media/player/web_media_player.h index fd02a83..79ce44b 100644 --- a/src/cobalt/media/player/web_media_player.h +++ b/src/cobalt/media/player/web_media_player.h
@@ -132,6 +132,7 @@ virtual base::Time GetStartDate() const = 0; #endif // SB_HAS(PLAYER_WITH_URL) virtual float GetCurrentTime() const = 0; + virtual float GetPlaybackRate() const = 0; // Get rate of loading the resource. virtual int GetDataRate() const = 0;
diff --git a/src/cobalt/media/player/web_media_player_impl.cc b/src/cobalt/media/player/web_media_player_impl.cc index a72957c..6185a52 100644 --- a/src/cobalt/media/player/web_media_player_impl.cc +++ b/src/cobalt/media/player/web_media_player_impl.cc
@@ -483,6 +483,14 @@ return static_cast<float>(pipeline_->GetMediaTime().InSecondsF()); } +float WebMediaPlayerImpl::GetPlaybackRate() const { + DCHECK_EQ(main_loop_, base::MessageLoop::current()); + if (state_.paused) { + return 0.0f; + } + return state_.playback_rate; +} + int WebMediaPlayerImpl::GetDataRate() const { DCHECK_EQ(main_loop_, base::MessageLoop::current());
diff --git a/src/cobalt/media/player/web_media_player_impl.h b/src/cobalt/media/player/web_media_player_impl.h index 60ce328..55a00c9 100644 --- a/src/cobalt/media/player/web_media_player_impl.h +++ b/src/cobalt/media/player/web_media_player_impl.h
@@ -157,6 +157,7 @@ base::Time GetStartDate() const override; #endif // SB_HAS(PLAYER_WITH_URL) float GetCurrentTime() const override; + float GetPlaybackRate() const override; // Get rate of loading the resource. int32 GetDataRate() const override;
diff --git a/src/cobalt/media/sandbox/web_media_player_sandbox.cc b/src/cobalt/media/sandbox/web_media_player_sandbox.cc index 079cee5..ed0ca18 100644 --- a/src/cobalt/media/sandbox/web_media_player_sandbox.cc +++ b/src/cobalt/media/sandbox/web_media_player_sandbox.cc
@@ -14,6 +14,7 @@ #include <algorithm> #include <memory> +#include <sstream> #include <string> #include <vector> @@ -31,6 +32,7 @@ #include "cobalt/render_tree/image.h" #include "starboard/event.h" #include "starboard/file.h" +#include "starboard/log.h" #include "starboard/system.h" namespace cobalt { @@ -52,25 +54,40 @@ const char kExampleProgressiveUrl[] = "https://storage.googleapis.com/yt-cobalt-media-element-demo/" "progressive.mp4"; - LOG(ERROR) << "\n\n\n" // Extra empty lines to separate from other messages - << "Usage: " << executable_file_name - << " [OPTIONS] <adaptive audio file path>\n" - << " or: " << executable_file_name - << " [OPTIONS] <adaptive video file path>\n" - << " or: " << executable_file_name - << " [OPTIONS] <adaptive audio file path> " - << " <adaptive video file path>\n" - << " or: " << executable_file_name - << " [OPTIONS] <progressive video path or url>\n" - << "Play adaptive audio/video or progressive video\n\n" - << "For example:\n" - << executable_file_name << " " << kExampleAdaptiveAudioPathName - << "\n" - << executable_file_name << " " << kExampleAdaptiveVideoPathName - << "\n" - << executable_file_name << " " << kExampleAdaptiveAudioPathName - << " " << kExampleAdaptiveVideoPathName << "\n" - << executable_file_name << " " << kExampleProgressiveUrl << "\n\n"; + std::stringstream ss; + // Head + ss << "\n\n" + << "======================== " << executable_file_name + << " ========================\n"; + + // Basic usage + ss << "Usage: " << executable_file_name + << " [OPTIONS] <adaptive audio file path>\n" + << " or: " << executable_file_name + << " [OPTIONS] <adaptive video file path>\n" + << " or: " << executable_file_name + << " [OPTIONS] <adaptive audio file path> " + << " <adaptive video file path>\n" + << " or: " << executable_file_name + << " [OPTIONS] <progressive video path or url>\n" + << "Play adaptive audio/video or progressive video\n\n"; + + // Options + ss << "OPTIONS:\n" + << " --dump_video_data: Dump video data into .dmp files\n" + << " --use_stub_audio_decoder: Use stub audio decoder to play the video\n" + << " --use_stub_audio_sink: Use stub audio sink to play the video\n" + << " --use_stub_video_decoder: Use stub video decoder to play the video\n" + << "\n"; + + // Usage examples + ss << "For example:\n " << executable_file_name << " --dump_video_data " + << kExampleAdaptiveAudioPathName << "\n " << executable_file_name << " " + << kExampleAdaptiveVideoPathName << "\n " << executable_file_name << " " + << kExampleAdaptiveAudioPathName << " " << kExampleAdaptiveVideoPathName + << "\n " << executable_file_name << " " << kExampleProgressiveUrl + << "\n\n"; + SbLogRaw(ss.str().c_str()); } std::string MakeCodecParameter(const std::string& string) { return string; } @@ -373,6 +390,11 @@ case kSbEventTypeStart: { SbEventStartData* data = static_cast<SbEventStartData*>(event->data); DCHECK(!s_application); + if (data->argument_count == 1) { + cobalt::media::sandbox::PrintUsage(data->argument_values[0]); + SbSystemRequestStop(0); + return; + } s_application = new Application(data->argument_count, data->argument_values); break;
diff --git a/src/cobalt/media/web_media_player_factory.h b/src/cobalt/media/web_media_player_factory.h index c05a924..9b9a37f 100644 --- a/src/cobalt/media/web_media_player_factory.h +++ b/src/cobalt/media/web_media_player_factory.h
@@ -17,6 +17,7 @@ #include <memory> +#include "base/callback.h" #include "cobalt/media/player/web_media_player.h" namespace cobalt { @@ -24,9 +25,15 @@ class WebMediaPlayerFactory { public: + typedef base::RepeatingCallback<void(const WebMediaPlayer*)> + EnumeratePlayersCB; + virtual std::unique_ptr<WebMediaPlayer> CreateWebMediaPlayer( WebMediaPlayerClient* client) = 0; + virtual void EnumerateWebMediaPlayers( + const EnumeratePlayersCB& enumerate_callback) const = 0; + protected: WebMediaPlayerFactory() {} ~WebMediaPlayerFactory() {}
diff --git a/src/cobalt/media_session/media_session.cc b/src/cobalt/media_session/media_session.cc index c615a35..b9d04a0 100644 --- a/src/cobalt/media_session/media_session.cc +++ b/src/cobalt/media_session/media_session.cc
@@ -36,19 +36,19 @@ void MediaSession::set_metadata(scoped_refptr<MediaMetadata> value) { metadata_ = value; - MaybeQueueChangeTask(); + MaybeQueueChangeTask(base::TimeDelta()); } void MediaSession::set_playback_state( MediaSessionPlaybackState playback_state) { playback_state_ = playback_state; - MaybeQueueChangeTask(); + MaybeQueueChangeTask(base::TimeDelta()); } void MediaSession::SetActionHandler( MediaSessionAction action, const MediaSessionActionHandlerHolder& handler) { // See algorithm https://wicg.github.io/mediasession/#actions-model - DCHECK_EQ(base::MessageLoop::current()->task_runner(), task_runner_); + DCHECK(task_runner_->BelongsToCurrentThread()); ActionMap::iterator it = action_map_.find(action); if (it != action_map_.end()) { @@ -59,32 +59,41 @@ action_map_[action] = new MediaSessionActionHandlerReference(this, handler); } - MaybeQueueChangeTask(); + MaybeQueueChangeTask(base::TimeDelta()); } void MediaSession::SetPositionState(base::Optional<MediaPositionState> state) { last_position_updated_time_ = GetMonotonicNow(); media_position_state_ = state; - MaybeQueueChangeTask(); + MaybeQueueChangeTask(base::TimeDelta()); } void MediaSession::TraceMembers(script::Tracer* tracer) { tracer->Trace(metadata_.get()); } -void MediaSession::MaybeQueueChangeTask() { - DCHECK_EQ(base::MessageLoop::current()->task_runner(), task_runner_); +bool MediaSession::IsChangeTaskQueuedForTesting() const { + DCHECK(task_runner_->BelongsToCurrentThread()); + return is_change_task_queued_; +} + +void MediaSession::MaybeQueueChangeTask(base::TimeDelta delay) { + DCHECK(task_runner_->BelongsToCurrentThread()); if (is_change_task_queued_) { return; } is_change_task_queued_ = true; - task_runner_->PostTask( - FROM_HERE, base::Bind(&MediaSession::OnChanged, base::Unretained(this))); + task_runner_->PostDelayedTask( + FROM_HERE, + base::Bind(&MediaSession::OnChanged, this), + delay); } void MediaSession::OnChanged() { is_change_task_queued_ = false; - media_session_client_->UpdateMediaSessionState(); + if (media_session_client_) { + media_session_client_->UpdateMediaSessionState(); + } } } // namespace media_session
diff --git a/src/cobalt/media_session/media_session.gyp b/src/cobalt/media_session/media_session.gyp index 242f152..da0d96b 100644 --- a/src/cobalt/media_session/media_session.gyp +++ b/src/cobalt/media_session/media_session.gyp
@@ -38,7 +38,8 @@ ], 'dependencies': [ '<(DEPTH)/cobalt/base/base.gyp:base', - '<(DEPTH)/cobalt/browser/browser_bindings_gen.gyp:generated_types' + '<(DEPTH)/cobalt/browser/browser_bindings_gen.gyp:generated_types', + '<(DEPTH)/cobalt/math/math.gyp:math', ], # This target doesn't generate any headers, but it exposes generated # header files (for idl dictionaries) through this module's public header
diff --git a/src/cobalt/media_session/media_session.h b/src/cobalt/media_session/media_session.h index b08d977..6c1db11 100644 --- a/src/cobalt/media_session/media_session.h +++ b/src/cobalt/media_session/media_session.h
@@ -77,8 +77,12 @@ DEFINE_WRAPPABLE_TYPE(MediaSession); void TraceMembers(script::Tracer* tracer) override; + // Check whether a change task has been queued. Should only be called by + // unit tests. + bool IsChangeTaskQueuedForTesting() const; + private: - void MaybeQueueChangeTask(); + void MaybeQueueChangeTask(base::TimeDelta delay); void OnChanged(); // Returns a time representing right now - may be overridden for testing.
diff --git a/src/cobalt/media_session/media_session_client.cc b/src/cobalt/media_session/media_session_client.cc index 96376c2..c3c6fe8 100644 --- a/src/cobalt/media_session/media_session_client.cc +++ b/src/cobalt/media_session/media_session_client.cc
@@ -15,11 +15,66 @@ #include "cobalt/media_session/media_session_client.h" #include <algorithm> +#include <cmath> #include <memory> +#include "starboard/time.h" + namespace cobalt { namespace media_session { +namespace { + +// Delay to re-query position state after an action has been invoked. +const base::TimeDelta kUpdateDelay = base::TimeDelta::FromMilliseconds(250); + +// Guess the media position state for the media session. +void GuessMediaPositionState(MediaSessionState* session_state, + const media::WebMediaPlayer** guess_player, + const media::WebMediaPlayer* current_player) { + // Assume the player with the biggest video size is the one controlled by the + // media session. This isn't perfect, so it's best that the web app set the + // media position state explicitly. + if (*guess_player == nullptr || + (*guess_player)->GetNaturalSize().GetArea() < + current_player->GetNaturalSize().GetArea()) { + *guess_player = current_player; + + MediaPositionState position_state; + float duration = (*guess_player)->GetDuration(); + if (std::isfinite(duration)) { + position_state.set_duration(duration); + } else if (std::isinf(duration)) { + position_state.set_duration(kSbTimeMax); + } else { + position_state.set_duration(0.0); + } + position_state.set_playback_rate((*guess_player)->GetPlaybackRate()); + position_state.set_position((*guess_player)->GetCurrentTime()); + + *session_state = MediaSessionState( + session_state->metadata(), + SbTimeGetMonotonicNow(), + position_state, + session_state->actual_playback_state(), + session_state->available_actions()); + } +} + +} // namespace + +MediaSessionClient::~MediaSessionClient() { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + // Prevent any outstanding MediaSession::OnChanged tasks from calling this. + media_session_->media_session_client_ = nullptr; +} + +void MediaSessionClient::SetMediaPlayerFactory( + const media::WebMediaPlayerFactory* factory) { + DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); + media_player_factory_ = factory; +} + MediaSessionPlaybackState MediaSessionClient::ComputeActualPlaybackState() const { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); @@ -76,6 +131,13 @@ result[kMediaSessionActionPlay] = false; break; case kMediaSessionPlaybackStateNone: + // Not defined in the spec: disable Seekbackward, Seekforward, SeekTo, & + // Stop when no media is playing. + result[kMediaSessionActionSeekbackward] = false; + result[kMediaSessionActionSeekforward] = false; + result[kMediaSessionActionSeekto] = false; + result[kMediaSessionActionStop] = false; + // Fall-through intended (None case falls through to Paused case). case kMediaSessionPlaybackStatePaused: // "Otherwise, remove pause from available actions." result[kMediaSessionActionPause] = false; @@ -134,26 +196,11 @@ } it->second->value().Run(*details); -} -MediaSessionState MediaSessionClient::GetMediaSessionState() { - MediaSessionState session_state; - GetMediaSessionStateInternal(&session_state); - return session_state; -} - -void MediaSessionClient::GetMediaSessionStateInternal( - MediaSessionState* session_state) { - DCHECK(media_session_->task_runner_); - if (!media_session_->task_runner_->BelongsToCurrentThread()) { - media_session_->task_runner_->PostBlockingTask( - FROM_HERE, - base::Bind(&MediaSessionClient::GetMediaSessionStateInternal, - base::Unretained(this), base::Unretained(session_state))); - return; + // Queue a session update to reflect the effects of the action. + if (!media_session_->media_position_state_) { + media_session_->MaybeQueueChangeTask(kUpdateDelay); } - - *session_state = session_state_; } void MediaSessionClient::UpdateMediaSessionState() { @@ -168,12 +215,30 @@ metadata->set_album(session_metadata->album()); metadata->set_artwork(session_metadata->artwork()); } + session_state_ = MediaSessionState( metadata, media_session_->last_position_updated_time_, media_session_->media_position_state_, ComputeActualPlaybackState(), ComputeAvailableActions()); + + // Compute the media position state if it's not set in the media session. + if (!media_session_->media_position_state_ && media_player_factory_) { + const media::WebMediaPlayer* player = nullptr; + media_player_factory_->EnumerateWebMediaPlayers( + base::BindRepeating(&GuessMediaPositionState, + &session_state_, &player)); + + // The media duration may be reported as 0 when seeking. Re-query the + // media session state after a delay. + if (session_state_.actual_playback_state() == + kMediaSessionPlaybackStatePlaying && + session_state_.duration() == 0) { + media_session_->MaybeQueueChangeTask(kUpdateDelay); + } + } + OnMediaSessionStateChanged(session_state_); }
diff --git a/src/cobalt/media_session/media_session_client.h b/src/cobalt/media_session/media_session_client.h index 77118d9..baf5277 100644 --- a/src/cobalt/media_session/media_session_client.h +++ b/src/cobalt/media_session/media_session_client.h
@@ -19,6 +19,7 @@ #include <memory> #include "base/threading/thread_checker.h" +#include "cobalt/media/web_media_player_factory.h" #include "cobalt/media_session/media_session.h" #include "cobalt/media_session/media_session_action_details.h" #include "cobalt/media_session/media_session_state.h" @@ -40,7 +41,7 @@ : media_session_(media_session), platform_playback_state_(kMediaSessionPlaybackStateNone) {} - virtual ~MediaSessionClient() {} + virtual ~MediaSessionClient(); // Creates platform-specific instance. static std::unique_ptr<MediaSessionClient> Create(); @@ -48,6 +49,12 @@ // Retrieves the singleton MediaSession associated with this client. scoped_refptr<MediaSession>& GetMediaSession() { return media_session_; } + // The web app should set the MediaPositionState of the MediaSession object. + // However, if that is not done, then query the web media player factory to + // guess which player is associated with the media session to get the media + // position state. The player factory must outlive the media session client. + void SetMediaPlayerFactory(const media::WebMediaPlayerFactory* factory); + // Sets the platform's current playback state. This is used to compute // the "guessed playback state" // https://wicg.github.io/mediasession/#guessed-playback-state @@ -69,9 +76,6 @@ InvokeActionInternal(std::move(details)); } - // Returns a copy of the current MediaSessionState. - MediaSessionState GetMediaSessionState(); - // Invoked on the browser thread when any metadata, position state, playback // state, or supported session actions change. virtual void OnMediaSessionStateChanged( @@ -82,9 +86,9 @@ scoped_refptr<MediaSession> media_session_; MediaSessionState session_state_; MediaSessionPlaybackState platform_playback_state_; + const media::WebMediaPlayerFactory* media_player_factory_ = nullptr; void UpdateMediaSessionState(); - void GetMediaSessionStateInternal(MediaSessionState* session_state); MediaSessionPlaybackState ComputeActualPlaybackState() const; MediaSessionState::AvailableActionsSet ComputeAvailableActions() const;
diff --git a/src/cobalt/media_session/media_session_state.h b/src/cobalt/media_session/media_session_state.h index e567f60..65148b4 100644 --- a/src/cobalt/media_session/media_session_state.h +++ b/src/cobalt/media_session/media_session_state.h
@@ -53,6 +53,9 @@ return metadata_; } + // Returns whether media position state was specified. + bool has_position_state() const { return last_position_updated_time_ != 0; } + // Returns the position of the current playback. // https://wicg.github.io/mediasession/#current-playback-position // Returns the position
diff --git a/src/cobalt/media_session/media_session_test.cc b/src/cobalt/media_session/media_session_test.cc index 63808c6..687167a 100644 --- a/src/cobalt/media_session/media_session_test.cc +++ b/src/cobalt/media_session/media_session_test.cc
@@ -25,6 +25,8 @@ #include "cobalt/script/script_value.h" #include "cobalt/script/testing/fake_script_value.h" #include "cobalt/script/wrappable.h" +#include "starboard/thread.h" +#include "starboard/time.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" @@ -62,7 +64,25 @@ MockMediaSession& mock_session() { return static_cast<MockMediaSession&>(*GetMediaSession().get()); } - MOCK_METHOD1(OnMediaSessionStateChanged, void(const MediaSessionState&)); + void OnMediaSessionStateChanged(const MediaSessionState& session_state) + override { + session_state_ = session_state; + ++session_change_count_; + } + void WaitForSessionStateChange() { + size_t current_change_count = session_change_count_; + while (GetMediaSession()->IsChangeTaskQueuedForTesting()) { + base::RunLoop().RunUntilIdle(); + if (current_change_count != session_change_count_) { + break; + } + SbThreadSleep(kSbTimeMillisecond); + } + } + MediaSessionState GetMediaSessionState() const { return session_state_; } + size_t GetMediaSessionChangeCount() const { return session_change_count_; } + MediaSessionState session_state_; + size_t session_change_count_ = 0; }; MATCHER_P(SeekTime, time, "") { @@ -79,99 +99,86 @@ TEST(MediaSessionTest, MediaSessionTest) { base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - base::RunLoop run_loop; MockMediaSessionClient client; - - ON_CALL(client, OnMediaSessionStateChanged(_)) - .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); - EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(1); - scoped_refptr<MediaSession> session = client.GetMediaSession(); - base::RunLoop().RunUntilIdle(); - EXPECT_EQ(kMediaSessionPlaybackStateNone, - client.GetMediaSessionState().actual_playback_state()); + EXPECT_EQ(kMediaSessionPlaybackStateNone, session->playback_state()); session->set_playback_state(kMediaSessionPlaybackStatePlaying); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, client.GetMediaSessionState().actual_playback_state()); - run_loop.Run(); + EXPECT_EQ(client.GetMediaSessionChangeCount(), 1); } TEST(MediaSessionTest, ActualPlaybackState) { base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - base::RunLoop run_loop; MockMediaSessionClient client; - - ON_CALL(client, OnMediaSessionStateChanged(_)) - .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); - EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(2)); - scoped_refptr<MediaSession> session = client.GetMediaSession(); - base::RunLoop().RunUntilIdle(); + // Trigger a session state change without impacting playback state. + session->set_metadata(new MediaMetadata); + client.WaitForSessionStateChange(); + EXPECT_EQ(client.GetMediaSessionChangeCount(), 1); + EXPECT_EQ(kMediaSessionPlaybackStateNone, client.GetMediaSessionState().actual_playback_state()); client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePlaying); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, client.GetMediaSessionState().actual_playback_state()); session->set_playback_state(kMediaSessionPlaybackStatePlaying); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, client.GetMediaSessionState().actual_playback_state()); session->set_playback_state(kMediaSessionPlaybackStatePaused); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, client.GetMediaSessionState().actual_playback_state()); client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePaused); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(kMediaSessionPlaybackStatePaused, client.GetMediaSessionState().actual_playback_state()); session->set_playback_state(kMediaSessionPlaybackStateNone); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(kMediaSessionPlaybackStateNone, client.GetMediaSessionState().actual_playback_state()); client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStateNone); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(kMediaSessionPlaybackStateNone, client.GetMediaSessionState().actual_playback_state()); - run_loop.Run(); + EXPECT_GE(client.GetMediaSessionChangeCount(), 2); } TEST(MediaSessionTest, NullActionClears) { base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - base::RunLoop run_loop; MockMediaSessionClient client; - MediaSessionState state; - - ON_CALL(client, OnMediaSessionStateChanged(_)) - .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); - EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0)); - scoped_refptr<MediaSession> session = client.GetMediaSession(); - base::RunLoop().RunUntilIdle(); - state = client.GetMediaSessionState(); + // Trigger a session state change without impacting playback state. + session->set_metadata(new MediaMetadata); + client.WaitForSessionStateChange(); + EXPECT_EQ(client.GetMediaSessionChangeCount(), 1); + + MediaSessionState state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStateNone, state.actual_playback_state()); EXPECT_EQ(0, state.available_actions().to_ulong()); @@ -184,30 +191,30 @@ FakeScriptValue<MediaSession::MediaSessionActionHandler> null_holder(NULL); session->SetActionHandler(kMediaSessionActionPlay, holder); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(1, client.GetMediaSessionState().available_actions().to_ulong()); client.InvokeAction(kMediaSessionActionPlay); session->SetActionHandler(kMediaSessionActionPlay, null_holder); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); EXPECT_EQ(0, client.GetMediaSessionState().available_actions().to_ulong()); client.InvokeAction(kMediaSessionActionPlay); + + EXPECT_GE(client.GetMediaSessionChangeCount(), 3); } TEST(MediaSessionTest, AvailableActions) { base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - base::RunLoop run_loop; MockMediaSessionClient client; MediaSessionState state; - - ON_CALL(client, OnMediaSessionStateChanged(_)) - .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); - EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0)); - scoped_refptr<MediaSession> session = client.GetMediaSession(); - base::RunLoop().RunUntilIdle(); + // Trigger a session state change without impacting playback state. + session->set_metadata(new MediaMetadata); + client.WaitForSessionStateChange(); + EXPECT_EQ(client.GetMediaSessionChangeCount(), 1); + state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStateNone, state.actual_playback_state()); EXPECT_EQ(0, state.available_actions().to_ulong()); @@ -218,28 +225,27 @@ session->SetActionHandler(kMediaSessionActionPlay, holder); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(1 << kMediaSessionActionPlay, state.available_actions().to_ulong()); session->SetActionHandler(kMediaSessionActionPause, holder); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(1 << kMediaSessionActionPlay, state.available_actions().to_ulong()); session->SetActionHandler(kMediaSessionActionSeekto, holder); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); - EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto, - state.available_actions().to_ulong()); + EXPECT_EQ(1 << kMediaSessionActionPlay, state.available_actions().to_ulong()); client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePlaying); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state()); EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto, @@ -247,7 +253,7 @@ session->set_playback_state(kMediaSessionPlaybackStatePlaying); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state()); EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto, @@ -255,7 +261,7 @@ session->set_playback_state(kMediaSessionPlaybackStatePaused); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state()); EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto, @@ -263,7 +269,7 @@ session->set_playback_state(kMediaSessionPlaybackStatePlaying); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state()); EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto, @@ -271,7 +277,7 @@ client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStatePaused); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStatePlaying, state.actual_playback_state()); EXPECT_EQ(1 << kMediaSessionActionPause | 1 << kMediaSessionActionSeekto, @@ -279,15 +285,14 @@ session->set_playback_state(kMediaSessionPlaybackStateNone); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStateNone, state.actual_playback_state()); - EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto, - state.available_actions().to_ulong()); + EXPECT_EQ(1 << kMediaSessionActionPlay, state.available_actions().to_ulong()); session->set_playback_state(kMediaSessionPlaybackStatePaused); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStatePaused, state.actual_playback_state()); EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto, @@ -295,25 +300,17 @@ client.UpdatePlatformPlaybackState(kMediaSessionPlaybackStateNone); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(kMediaSessionPlaybackStatePaused, state.actual_playback_state()); EXPECT_EQ(1 << kMediaSessionActionPlay | 1 << kMediaSessionActionSeekto, state.available_actions().to_ulong()); - - run_loop.Run(); } TEST(MediaSessionTest, SeekDetails) { base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - base::RunLoop run_loop; MockMediaSessionClient client; - - ON_CALL(client, OnMediaSessionStateChanged(_)) - .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); - EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0)); - scoped_refptr<MediaSession> session = client.GetMediaSession(); MockCallbackFunction cf; @@ -351,18 +348,15 @@ details->set_action(kMediaSessionActionSeekbackward); details->set_seek_offset(5.6); client.InvokeAction(std::move(details)); + + client.WaitForSessionStateChange(); + EXPECT_GE(client.GetMediaSessionChangeCount(), 0); } TEST(MediaSessionTest, PositionState) { base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - base::RunLoop run_loop; MockMediaSessionClient client; - - ON_CALL(client, OnMediaSessionStateChanged(_)) - .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); - EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(3)); - MockMediaSession& session = client.mock_session(); MediaSessionState state; @@ -373,8 +367,12 @@ position_state->set_duration(100.0); position_state->set_position(10.0); + // Trigger a session state change without impacting playback state. + session.set_metadata(new MediaMetadata); + client.WaitForSessionStateChange(); + EXPECT_EQ(client.GetMediaSessionChangeCount(), 1); + // Position state not yet reported - base::RunLoop().RunUntilIdle(); state = client.GetMediaSessionState(); EXPECT_EQ(0, state.GetCurrentPlaybackPosition(start_time + 999 * kSbTimeSecond)); @@ -385,7 +383,7 @@ EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time)); position_state->set_playback_rate(1.0); session.SetPositionState(position_state); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ((10 + 50) * kSbTimeSecond, state.GetCurrentPlaybackPosition(start_time + 50 * kSbTimeSecond)); @@ -398,7 +396,7 @@ EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time)); position_state->set_playback_rate(2.0); session.SetPositionState(position_state); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ((10 + 2 * 20) * kSbTimeSecond, state.GetCurrentPlaybackPosition(start_time + 20 * kSbTimeSecond)); @@ -411,7 +409,7 @@ EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time)); position_state->set_playback_rate(-1.0); session.SetPositionState(position_state); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(0 * kSbTimeSecond, state.GetCurrentPlaybackPosition(start_time + 20 * kSbTimeSecond)); @@ -425,7 +423,7 @@ position_state->set_duration(std::numeric_limits<double>::infinity()); position_state->set_playback_rate(1.0); session.SetPositionState(position_state); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(10 * kSbTimeSecond + 1 * kSbTimeDay, state.GetCurrentPlaybackPosition(start_time + 1 * kSbTimeDay)); @@ -436,7 +434,7 @@ // (Actual playback rate is 0.0, so position is the last reported position. // The web app should update position and playback states together.) session.set_playback_state(kMediaSessionPlaybackStatePaused); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(10 * kSbTimeSecond, state.GetCurrentPlaybackPosition(start_time + 999 * kSbTimeSecond)); @@ -447,32 +445,32 @@ // Position state cleared EXPECT_CALL(session, GetMonotonicNow()).WillOnce(Return(start_time)); session.SetPositionState(base::nullopt); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); EXPECT_EQ(0, state.GetCurrentPlaybackPosition(start_time + 999 * kSbTimeSecond)); EXPECT_EQ(0, state.duration()); EXPECT_EQ(0.0, state.actual_playback_rate()); + + EXPECT_GE(client.GetMediaSessionChangeCount(), 3); } TEST(MediaSessionTest, Metadata) { base::MessageLoop message_loop(base::MessageLoop::TYPE_DEFAULT); - base::RunLoop run_loop; MockMediaSessionClient client; - - ON_CALL(client, OnMediaSessionStateChanged(_)) - .WillByDefault(InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit)); - EXPECT_CALL(client, OnMediaSessionStateChanged(_)).Times(AtLeast(0)); - MockMediaSession& session = client.mock_session(); MediaSessionState state; MediaMetadataInit init_metadata; base::Optional<MediaMetadataInit> state_metadata; + // Trigger a session state change without impacting metadata. + session.set_playback_state(kMediaSessionPlaybackStateNone); + client.WaitForSessionStateChange(); + EXPECT_EQ(client.GetMediaSessionChangeCount(), 1); + // Metadata not yet set - base::RunLoop().RunUntilIdle(); state = client.GetMediaSessionState(); state_metadata = state.metadata(); EXPECT_FALSE(state.has_metadata()); @@ -491,7 +489,7 @@ session.set_metadata( scoped_refptr<MediaMetadata>(new MediaMetadata(init_metadata))); - base::RunLoop().RunUntilIdle(); + client.WaitForSessionStateChange(); state = client.GetMediaSessionState(); state_metadata = state.metadata(); EXPECT_TRUE(state.has_metadata()); @@ -501,6 +499,8 @@ EXPECT_EQ("album", state_metadata->album()); EXPECT_EQ(1, state_metadata->artwork().size()); EXPECT_EQ("http://art.image", state_metadata->artwork().at(0).src()); + + EXPECT_GE(client.GetMediaSessionChangeCount(), 2); } } // namespace
diff --git a/src/cobalt/network/net_log_constants.cc b/src/cobalt/network/net_log_constants.cc index 6f96411..a012c4b 100644 --- a/src/cobalt/network/net_log_constants.cc +++ b/src/cobalt/network/net_log_constants.cc
@@ -115,7 +115,7 @@ { std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); - // TODO[johnx]: find out where the corresponding integer number for each + // TODO: find out where the corresponding integer number for each // event phase lives and replace the following hard-coded number with them. dict->SetInteger("PHASE_BEGIN", 0); dict->SetInteger("PHASE_END", 1);
diff --git a/src/cobalt/network/switches.cc b/src/cobalt/network/switches.cc index 6a7bd0a..469b8ae 100644 --- a/src/cobalt/network/switches.cc +++ b/src/cobalt/network/switches.cc
@@ -33,6 +33,9 @@ const char kUserAgent[] = "user_agent"; #endif // ENABLE_DEBUG_COMMAND_LINE_SWITCHES +// Switch to disable use of the Quic network protocol. +const char kDisableQuic[] = "disable_quic"; + } // namespace switches } // namespace network } // namespace cobalt
diff --git a/src/cobalt/network/switches.h b/src/cobalt/network/switches.h index 8d46ce1..a3c3894 100644 --- a/src/cobalt/network/switches.h +++ b/src/cobalt/network/switches.h
@@ -24,6 +24,7 @@ extern const char kNetLogCaptureMode[]; extern const char kUserAgent[]; #endif // ENABLE_DEBUG_COMMAND_LINE_SWITCHES +extern const char kDisableQuic[]; } // namespace switches } // namespace network
diff --git a/src/cobalt/network/url_request_context.cc b/src/cobalt/network/url_request_context.cc index 850eade..4cfb2c8 100644 --- a/src/cobalt/network/url_request_context.cc +++ b/src/cobalt/network/url_request_context.cc
@@ -22,11 +22,12 @@ #include "cobalt/network/network_delegate.h" #include "cobalt/network/persistent_cookie_store.h" #include "cobalt/network/proxy_config_service.h" +#include "cobalt/network/switches.h" #include "net/cert/cert_net_fetcher.h" +#include "net/cert/cert_verifier.h" #include "net/cert/cert_verify_proc.h" #include "net/cert/ct_policy_enforcer.h" #include "net/cert/do_nothing_ct_verifier.h" -#include "net/cert/multi_threaded_cert_verifier.h" #include "net/cert_net/cert_net_fetcher_impl.h" #include "net/dns/host_cache.h" #include "net/http/http_auth_handler_factory.h" @@ -49,13 +50,30 @@ proxy_config.proxy_rules().ParseFromString(proxy_rules); return proxy_config; } + +#if defined(ENABLE_DEBUGGER) +const char kQUICToggleCommand[] = "quic_toggle"; +const char kQUICToggleCommandShortHelp[] = "Toggles QUIC support on/off."; +const char kQUICToggleCommandLongHelp[] = + "Each time this is called, it will toggle whether QUIC support is " + "enabled or not. The new value will apply for new streams."; +#endif // defined(ENABLE_DEBUGGER) + } // namespace URLRequestContext::URLRequestContext( storage::StorageManager* storage_manager, const std::string& custom_proxy, net::NetLog* net_log, bool ignore_certificate_errors, scoped_refptr<base::SingleThreadTaskRunner> network_task_runner) - : ALLOW_THIS_IN_INITIALIZER_LIST(storage_(this)) { + : ALLOW_THIS_IN_INITIALIZER_LIST(storage_(this)) +#if defined(ENABLE_DEBUGGER) + , + ALLOW_THIS_IN_INITIALIZER_LIST(quic_toggle_command_handler_( + kQUICToggleCommand, + base::Bind(&URLRequestContext::OnQuicToggle, base::Unretained(this)), + kQUICToggleCommandShortHelp, kQUICToggleCommandLongHelp)) +#endif // defined(ENABLE_DEBUGGER) +{ if (storage_manager) { persistent_cookie_store_ = new PersistentCookieStore(storage_manager, network_task_runner); @@ -85,11 +103,13 @@ storage_.set_ct_policy_enforcer(std::unique_ptr<net::CTPolicyEnforcer>( new net::DefaultCTPolicyEnforcer())); DCHECK(ct_policy_enforcer()); - storage_.set_cert_verifier(std::make_unique<net::MultiThreadedCertVerifier>( - net::CertVerifyProc::CreateDefault())); + // As of Chromium m70 net, CreateDefault will return a caching multi-thread + // cert verifier, the verification cache will usually cache 25-40 + // results in a single session which can take up to 100KB memory. + storage_.set_cert_verifier(net::CertVerifier::CreateDefault()); storage_.set_transport_security_state( std::make_unique<net::TransportSecurityState>()); - // TODO[johnx]: Investigate if we want the cert transparency verifier. + // TODO: Investigate if we want the cert transparency verifier. storage_.set_cert_transparency_verifier( std::make_unique<net::DoNothingCTVerifier>()); storage_.set_ssl_config_service( @@ -102,15 +122,13 @@ net::HttpNetworkSession::Params params; #if defined(COBALT_ENABLE_QUIC) - params.enable_quic = true; + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); + params.enable_quic = !command_line->HasSwitch(switches::kDisableQuic); #endif #if defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) params.ignore_certificate_errors = ignore_certificate_errors; if (ignore_certificate_errors) { - auto* multi_threaded_cert_verifier = - base::polymorphic_downcast<net::MultiThreadedCertVerifier*>( - cert_verifier()); - multi_threaded_cert_verifier->set_ignore_errors(true); + cert_verifier()->set_ignore_certificate_errors(true); LOG(INFO) << "ignore_certificate_errors option specified, Certificate " "validation results will be ignored but error message will " "still be displayed."; @@ -164,5 +182,12 @@ std::make_unique<ProxyConfigService>(proxy_config)); } +#if defined(ENABLE_DEBUGGER) +void URLRequestContext::OnQuicToggle(const std::string& /*message*/) { + DCHECK(storage_.http_network_session()); + storage_.http_network_session()->ToggleQuic(); +} +#endif // defined(ENABLE_DEBUGGER) + } // namespace network } // namespace cobalt
diff --git a/src/cobalt/network/url_request_context.h b/src/cobalt/network/url_request_context.h index 8845870..56852a9 100644 --- a/src/cobalt/network/url_request_context.h +++ b/src/cobalt/network/url_request_context.h
@@ -23,6 +23,10 @@ #include "net/url_request/url_request_context_getter.h" #include "net/url_request/url_request_context_storage.h" +#if defined(ENABLE_DEBUGGER) +#include "cobalt/debug/console/command_manager.h" +#endif // ENABLE_DEBUGGER + namespace cobalt { namespace storage { class StorageManager; @@ -44,6 +48,16 @@ net::URLRequestContextStorage storage_; scoped_refptr<net::CookieMonster::PersistentCookieStore> persistent_cookie_store_; + +#if defined(ENABLE_DEBUGGER) + // Command handler object for toggling the input fuzzer on/off. + debug::console::ConsoleCommandManager::CommandHandler + quic_toggle_command_handler_; + + // Toggles the input fuzzer on/off. Ignores the parameter. + void OnQuicToggle(const std::string&); +#endif // defined(ENABLE_DEBUGGER) + DISALLOW_COPY_AND_ASSIGN(URLRequestContext); };
diff --git a/src/cobalt/renderer/glimp_shaders/glsl/fragment_skia_texture_lookup_translated_rectangle.glsl b/src/cobalt/renderer/glimp_shaders/glsl/fragment_skia_texture_lookup_translated_rectangle.glsl new file mode 100644 index 0000000..6969506 --- /dev/null +++ b/src/cobalt/renderer/glimp_shaders/glsl/fragment_skia_texture_lookup_translated_rectangle.glsl
@@ -0,0 +1,39 @@ +#version 100 + +uniform highp float u_skRTHeight; +precision mediump float; +uniform vec4 uColor_Stage0; +uniform vec4 uproxyRect_Stage1; +uniform float ucornerRadius_Stage1; +uniform float ublurRadius_Stage1; +uniform highp sampler2D uTextureSampler_0_Stage1; +void main() { +highp vec2 _sktmpCoord = gl_FragCoord.xy; +highp vec4 sk_FragCoord = vec4(_sktmpCoord.x, u_skRTHeight - _sktmpCoord.y, 1.0, 1.0); + vec4 outputColor_Stage0; + { + outputColor_Stage0 = uColor_Stage0; + } + vec4 output_Stage1; + { + vec2 translatedFragPos = sk_FragCoord.xy - uproxyRect_Stage1.xy; + float threshold = ucornerRadius_Stage1 + 2.0 * ublurRadius_Stage1; + vec2 middle = (uproxyRect_Stage1.zw - uproxyRect_Stage1.xy) - 2.0 * threshold; + if (translatedFragPos.x >= threshold && translatedFragPos.x < middle.x + threshold) { + translatedFragPos.x = threshold; + } else if (translatedFragPos.x >= middle.x + threshold) { + translatedFragPos.x -= middle.x - 1.0; + } + if (translatedFragPos.y > threshold && translatedFragPos.y < middle.y + threshold) { + translatedFragPos.y = threshold; + } else if (translatedFragPos.y >= middle.y + threshold) { + translatedFragPos.y -= middle.y - 1.0; + } + vec2 proxyDims = vec2(2.0 * threshold + 1.0); + vec2 texCoord = translatedFragPos / proxyDims; + output_Stage1 = texture2D(uTextureSampler_0_Stage1, texCoord); + } + { + gl_FragColor = outputColor_Stage0 * output_Stage1; + } +}
diff --git a/src/cobalt/renderer/pipeline.cc b/src/cobalt/renderer/pipeline.cc index 8685199..ef54726 100644 --- a/src/cobalt/renderer/pipeline.cc +++ b/src/cobalt/renderer/pipeline.cc
@@ -175,18 +175,20 @@ FROM_HERE, base::Bind(&Pipeline::ShutdownSubmissionQueue, base::Unretained(this))); - // This potential reference to a render tree whose animations may have ended - // must be destroyed before we shutdown the rasterizer thread since it may - // contain references to render tree nodes and resources. - last_render_tree_ = NULL; - last_animated_render_tree_ = NULL; - // Submit a shutdown task to the rasterizer thread so that it can shutdown // anything that must be shutdown from that thread. - rasterizer_thread_.message_loop()->task_runner()->PostTask( + rasterizer_thread_.message_loop()->task_runner()->PostBlockingTask( FROM_HERE, base::Bind(&Pipeline::ShutdownRasterizerThread, base::Unretained(this))); + // Finally shutdown the rasterizer. Do this after ShutdownRasterizerThread() + // has run, just in case it posted more tasks to the rasterizer thread. This + // will free the rasterizer after the posted tasks have executed (unless they + // were delayed tasks). + rasterizer_thread_.message_loop()->task_runner()->PostBlockingTask( + FROM_HERE, + base::Bind(&Pipeline::ShutdownRasterizer, base::Unretained(this))); + rasterizer_thread_.Stop(); } @@ -584,8 +586,11 @@ render_target_); } - // Finally, destroy the rasterizer. - rasterizer_.reset(); + // This potential reference to a render tree whose animations may have ended + // must be destroyed before we shutdown the rasterizer thread since it may + // contain references to render tree nodes and resources. + last_render_tree_ = NULL; + last_animated_render_tree_ = NULL; } #if defined(ENABLE_DEBUGGER)
diff --git a/src/cobalt/renderer/pipeline.h b/src/cobalt/renderer/pipeline.h index c96da47..edd931d 100644 --- a/src/cobalt/renderer/pipeline.h +++ b/src/cobalt/renderer/pipeline.h
@@ -163,6 +163,11 @@ // needs to be shutdown from there. void ShutdownRasterizerThread(); + // This method releases the rasterizer. This is exposed separately from + // ShutdownRasterizerThread() so it can be executed after tasks that may + // be posted by ShutdownRasterizerThread(). + void ShutdownRasterizer() { rasterizer_.reset(); } + #if defined(ENABLE_DEBUGGER) void OnDumpCurrentRenderTree(const std::string&); void OnToggleFpsStdout(const std::string&);
diff --git a/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc b/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc index bfff114..e2a4b5c 100644 --- a/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc +++ b/src/cobalt/renderer/rasterizer/blitter/render_tree_node_visitor.cc
@@ -51,6 +51,8 @@ namespace rasterizer { namespace blitter { +using common::utils::IsOpaque; +using common::utils::IsTransparent; using math::Matrix3F; using math::Rect; using math::RectF; @@ -154,9 +156,9 @@ } if (!filter_node->data().opacity_filter || - filter_node->data().opacity_filter->opacity() == 1.0f) { + IsOpaque(filter_node->data().opacity_filter->opacity())) { source->Accept(this); - } else if (filter_node->data().opacity_filter->opacity() != 0.0f) { + } else if (!IsTransparent(filter_node->data().opacity_filter->opacity())) { // If the opacity is set to 0, the contents are invisible and we are // trivially done. However, if we made it into this branch, then // we know that opacity is in the range (0, 1), exclusive. @@ -254,7 +256,7 @@ -local_matrix.Get(1, 2) * image_size.height())); // Render the image. - if (render_state_.opacity < 1.0f) { + if (!IsOpaque(render_state_.opacity)) { SbBlitterSetBlending(context_, true); SbBlitterSetModulateBlitsWithColor(context_, true); SbBlitterSetColor( @@ -336,12 +338,7 @@ const RectF& rect) { SbBlitterColor blitter_color = RenderTreeToBlitterColor(color); SbBlitterSetColor(context, blitter_color); - - if (SbBlitterAFromColor(blitter_color) < 255) { - SbBlitterSetBlending(context, true); - } else { - SbBlitterSetBlending(context, false); - } + SbBlitterSetBlending(context, !IsOpaque(color.a())); // We draw four rectangles, one for each border edge. They have the following // layout: @@ -407,11 +404,11 @@ rect_node->data().background_brush.get()); ColorRGBA color = solid_color_brush->color(); - if (render_state_.opacity < 1.0f) { + if (!IsOpaque(render_state_.opacity)) { color.set_a(color.a() * render_state_.opacity); } - SbBlitterSetBlending(context_, color.a() < 1.0f); + SbBlitterSetBlending(context_, !IsOpaque(color.a())); SbBlitterSetColor(context_, RenderTreeToBlitterColor(color)); SbBlitterFillRect(context_, RectFToBlitterRect(transformed_rect)); @@ -448,7 +445,7 @@ border.bottom.width * render_state_.transform.scale().y(); ColorRGBA color = border.left.color; - if (render_state_.opacity < 1.0f) { + if (!IsOpaque(render_state_.opacity)) { color.set_a(color.a() * render_state_.opacity); } RenderRectNodeBorder(context_, color, left_width, right_width, top_width, @@ -493,7 +490,7 @@ SbBlitterSetBlending(context_, true); - if (render_state_.opacity < 1.0f) { + if (!IsOpaque(render_state_.opacity)) { SbBlitterSetModulateBlitsWithColor(context_, true); SbBlitterSetColor( context_,
diff --git a/src/cobalt/renderer/rasterizer/common/utils.cc b/src/cobalt/renderer/rasterizer/common/utils.cc index 4f7c304..d7049a2 100644 --- a/src/cobalt/renderer/rasterizer/common/utils.cc +++ b/src/cobalt/renderer/rasterizer/common/utils.cc
@@ -52,6 +52,14 @@ return false; } +bool IsOpaque(float opacity) { + return opacity >= 254.5f / 255.0f; +} + +bool IsTransparent(float opacity) { + return opacity <= 0.5f / 255.0f; +} + } // namespace utils } // namespace common } // namespace rasterizer
diff --git a/src/cobalt/renderer/rasterizer/common/utils.h b/src/cobalt/renderer/rasterizer/common/utils.h index b67314a..5fe915b 100644 --- a/src/cobalt/renderer/rasterizer/common/utils.h +++ b/src/cobalt/renderer/rasterizer/common/utils.h
@@ -32,6 +32,13 @@ // offscreen target, then rendering that target with opacity. bool NodeCanRenderWithOpacity(render_tree::Node* node); +// Returns whether the given opacity [0,1] should be considered fully opaque. +bool IsOpaque(float opacity); + +// Returns whether the given opacity [0,1] should be considered fully +// transparent. +bool IsTransparent(float opacity); + } // namespace utils } // namespace common } // namespace rasterizer
diff --git a/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc b/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc index 13a8e7e..40c04a4 100644 --- a/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc +++ b/src/cobalt/renderer/rasterizer/egl/render_tree_node_visitor.cc
@@ -47,6 +47,9 @@ namespace rasterizer { namespace egl { +using common::utils::IsOpaque; +using common::utils::IsTransparent; + namespace { typedef float ColorTransformMatrix[16]; @@ -76,8 +79,6 @@ return kBT709ColorTransformMatrixInColumnMajor; } -bool IsOpaque(float opacity) { return opacity >= 0.999f; } - bool IsUniformSolidColor(const render_tree::Border& border) { return border.left.style == render_tree::kBorderStyleSolid && border.right.style == render_tree::kBorderStyleSolid && @@ -413,10 +414,10 @@ if (data.opacity_filter && !data.viewport_filter && !data.blur_filter && !data.map_to_mesh_filter) { const float filter_opacity = data.opacity_filter->opacity(); - if (filter_opacity <= 0.0f) { + if (IsTransparent(filter_opacity)) { // Totally transparent. Ignore the source. return; - } else if (filter_opacity >= 1.0f) { + } else if (IsOpaque(filter_opacity)) { // Totally opaque. Render like normal. data.source->Accept(this); return; @@ -1111,7 +1112,7 @@ // clear command instead of a more general draw command, to give the GL // driver a better chance to optimize. if (!draw_state_.rounded_scissor_corners && - draw_state_.transform.IsIdentity() && draw_state_.opacity == 1.0f) { + draw_state_.transform.IsIdentity() && IsOpaque(draw_state_.opacity)) { math::Rect old_scissor = draw_state_.scissor; draw_state_.scissor.Intersect(math::Rect::RoundFromRectF(rect)); std::unique_ptr<DrawObject> draw_clear(
diff --git a/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc b/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc index 37ffae8..7c44ce9 100644 --- a/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc +++ b/src/cobalt/renderer/rasterizer/skia/render_tree_node_visitor.cc
@@ -81,6 +81,9 @@ namespace rasterizer { namespace skia { +using common::utils::IsOpaque; +using common::utils::IsTransparent; + RenderTreeNodeVisitor::RenderTreeNodeVisitor( SkCanvas* render_target, const CreateScratchSurfaceFunction* create_scratch_surface_function, @@ -450,13 +453,13 @@ #endif // ENABLE_RENDER_TREE_VISITOR_TRACING if (filter_node->data().opacity_filter && - filter_node->data().opacity_filter->opacity() <= 0.0f) { + IsTransparent(filter_node->data().opacity_filter->opacity())) { // The opacity 0, so we have nothing to render. return; } if ((!filter_node->data().opacity_filter || - filter_node->data().opacity_filter->opacity() == 1.0f) && + IsOpaque(filter_node->data().opacity_filter->opacity())) && !filter_node->data().viewport_filter && (!filter_node->data().blur_filter || filter_node->data().blur_filter->blur_sigma() == 0.0f)) { @@ -557,7 +560,7 @@ // |kLow_SkFilterQuality| is used for bilinear interpolation of images. paint.setFilterQuality(kLow_SkFilterQuality); - if (draw_state.opacity < 1.0f) { + if (!IsOpaque(draw_state.opacity)) { paint.setAlpha(draw_state.opacity * 255); } else if (is_opaque && draw_state.clip_is_rect) { paint.setBlendMode(SkBlendMode::kSrc); @@ -811,7 +814,7 @@ const cobalt::render_tree::ColorRGBA& color = solid_color_brush->color(); float alpha = color.a() * draw_state_.opacity; - if (alpha == 1.0f) { + if (IsOpaque(alpha)) { paint_->setBlendMode(SkBlendMode::kSrc); } else { paint_->setBlendMode(SkBlendMode::kSrcOver); @@ -862,10 +865,10 @@ SkGradientShader::kInterpolateColorsInPremul_Flag, NULL)); paint_->setShader(shader); - if (!skia_color_stops.has_alpha && draw_state_.opacity == 1.0f) { + if (!skia_color_stops.has_alpha && IsOpaque(draw_state_.opacity)) { paint_->setBlendMode(SkBlendMode::kSrc); } else { - if (draw_state_.opacity < 1.0f) { + if (!IsOpaque(draw_state_.opacity)) { paint_->setAlpha(255 * draw_state_.opacity); } paint_->setBlendMode(SkBlendMode::kSrcOver); @@ -900,10 +903,10 @@ SkGradientShader::kInterpolateColorsInPremul_Flag, &local_matrix)); paint_->setShader(shader); - if (!skia_color_stops.has_alpha && draw_state_.opacity == 1.0f) { + if (!skia_color_stops.has_alpha && IsOpaque(draw_state_.opacity)) { paint_->setBlendMode(SkBlendMode::kSrc); } else { - if (draw_state_.opacity < 1.0f) { + if (!IsOpaque(draw_state_.opacity)) { paint_->setAlpha(255 * draw_state_.opacity); } paint_->setBlendMode(SkBlendMode::kSrcOver); @@ -985,7 +988,7 @@ paint.setARGB(alpha * 255, border_color.r() * 255, border_color.g() * 255, border_color.b() * 255); paint.setAntiAlias(anti_alias); - if (alpha == 1.0f) { + if (IsOpaque(alpha)) { paint.setBlendMode(SkBlendMode::kSrc); } else { paint.setBlendMode(SkBlendMode::kSrcOver); @@ -1012,7 +1015,7 @@ paint.setARGB(alpha * 255, color.r() * 255, color.g() * 255, color.b() * 255); paint.setAntiAlias(anti_alias); - if (alpha == 1.0f) { + if (IsOpaque(alpha)) { paint.setBlendMode(SkBlendMode::kSrc); } else { paint.setBlendMode(SkBlendMode::kSrcOver); @@ -1128,7 +1131,7 @@ float alpha = color.a(); alpha *= draw_state->opacity; paint.setARGB(alpha * 255, color.r() * 255, color.g() * 255, color.b() * 255); - if (alpha == 1.0f) { + if (IsOpaque(alpha)) { paint.setBlendMode(SkBlendMode::kSrc); } else { paint.setBlendMode(SkBlendMode::kSrcOver);
diff --git a/src/cobalt/script/sequence.h b/src/cobalt/script/sequence.h index 5344212..5c32d8d 100644 --- a/src/cobalt/script/sequence.h +++ b/src/cobalt/script/sequence.h
@@ -36,6 +36,7 @@ // --- Vector partial emulation --- typedef typename SequenceType::size_type size_type; + typedef typename SequenceType::value_type value_type; typedef typename SequenceType::reference reference; typedef typename SequenceType::const_reference const_reference; typedef typename SequenceType::iterator iterator;
diff --git a/src/cobalt/script/shared/stub_script_debugger.cc b/src/cobalt/script/shared/stub_script_debugger.cc index 060a90e..a8ef40b 100644 --- a/src/cobalt/script/shared/stub_script_debugger.cc +++ b/src/cobalt/script/shared/stub_script_debugger.cc
@@ -14,36 +14,36 @@ #include <memory> -#include "cobalt/script/script_debugger.h" - #include "base/logging.h" +#include "cobalt/script/global_environment.h" +#include "cobalt/script/script_debugger.h" +#include "cobalt/script/source_code.h" namespace cobalt { namespace script { class StubScriptDebugger : public ScriptDebugger { public: - StubScriptDebugger(GlobalEnvironment* global_environment, - Delegate* delegate) { - NOTIMPLEMENTED(); - } - ~StubScriptDebugger() override { NOTIMPLEMENTED(); } + StubScriptDebugger(GlobalEnvironment* global_environment, Delegate* delegate) + : global_environment_(global_environment), delegate_(delegate) {} + ~StubScriptDebugger() override {} - void Attach(const std::string& state) override { NOTIMPLEMENTED(); } - std::string Detach() override { - NOTIMPLEMENTED(); - return std::string(); - } + void Attach(const std::string& state) override {} + std::string Detach() override { return std::string(); } bool EvaluateDebuggerScript(const std::string& js_code, std::string* out_result_utf8) override { - return false; + // The stub just evaluates debugger scripts as if they are part of the page. + scoped_refptr<script::SourceCode> source_code = + script::SourceCode::CreateSourceCode( + js_code, base::SourceLocation("[object StubScriptDebugger]", 1, 1)); + return global_environment_->EvaluateScript(source_code, out_result_utf8); } std::set<std::string> SupportedProtocolDomains() override { - NOTIMPLEMENTED(); return std::set<std::string>(); } + bool DispatchProtocolMessage(const std::string& method, const std::string& message) override { NOTIMPLEMENTED(); @@ -70,9 +70,12 @@ PauseOnExceptionsState SetPauseOnExceptions( PauseOnExceptionsState state) override { - NOTIMPLEMENTED(); return kNone; } + + private: + GlobalEnvironment* global_environment_; + Delegate* delegate_; }; // Static factory method declared in public interface.
diff --git a/src/cobalt/script/v8c/isolate_fellowship.cc b/src/cobalt/script/v8c/isolate_fellowship.cc index b554b8a..9e402e9 100644 --- a/src/cobalt/script/v8c/isolate_fellowship.cc +++ b/src/cobalt/script/v8c/isolate_fellowship.cc
@@ -39,6 +39,8 @@ // ScriptValue::*Reference do not currently // support incremental tracing. "--noincremental_marking_wrappers", + "--noexpose_wasm", + "--novalidate_asm", #if defined(COBALT_GC_ZEAL) "--gc_interval=1200" #endif
diff --git a/src/cobalt/site/docs/development/setup-raspi.md b/src/cobalt/site/docs/development/setup-raspi.md index 50faeb9..1c584e6 100644 --- a/src/cobalt/site/docs/development/setup-raspi.md +++ b/src/cobalt/site/docs/development/setup-raspi.md
@@ -91,8 +91,8 @@ 1. Run the following commands to build Cobalt: ``` - $ gyp_cobalt raspi-1 - $ ninja -C out/raspi-1_debug cobalt + $ gyp_cobalt raspi-2 + $ ninja -C out/raspi-2_debug cobalt ``` 1. Run the following command to install your Cobalt binary (and content) @@ -100,7 +100,7 @@ ``` rsync -avzh --exclude="obj*" \ - $COBALT_SRC/out/raspi-1_debug pi@$RASPI_ADDR:~/ + $COBALT_SRC/out/raspi-2_debug pi@$RASPI_ADDR:~/ ``` The `rsyncs` get somewhat faster after the first time, as `rsync` is good at @@ -112,7 +112,7 @@ ``` ssh pi@$RASPI_ADDR - cd raspi-1_debug + cd raspi-2_debug ./cobalt ```
diff --git a/src/cobalt/speech/sandbox/sandbox.gyp b/src/cobalt/speech/sandbox/sandbox.gyp index 1a19a35..03be453 100644 --- a/src/cobalt/speech/sandbox/sandbox.gyp +++ b/src/cobalt/speech/sandbox/sandbox.gyp
@@ -30,6 +30,7 @@ 'dependencies': [ '<(DEPTH)/cobalt/audio/audio.gyp:audio', '<(DEPTH)/cobalt/base/base.gyp:base', + '<(DEPTH)/cobalt/debug/debug.gyp:console_command_manager', '<(DEPTH)/cobalt/dom/dom.gyp:dom', '<(DEPTH)/cobalt/loader/loader.gyp:loader', '<(DEPTH)/cobalt/network/network.gyp:network',
diff --git a/src/cobalt/tools/automated_testing/cobalt_runner.py b/src/cobalt/tools/automated_testing/cobalt_runner.py index 6d9ae62..d21b9d5 100644 --- a/src/cobalt/tools/automated_testing/cobalt_runner.py +++ b/src/cobalt/tools/automated_testing/cobalt_runner.py
@@ -247,7 +247,8 @@ def _KillLauncher(self): """Kills the launcher and its attached Cobalt instance.""" - self.ExecuteJavaScript('window.close();') + if self.CanExecuteJavaScript(): + self.ExecuteJavaScript('window.close();') self.runner_thread.join(COBALT_EXIT_TIMEOUT_SECONDS) if self.runner_thread.isAlive(): @@ -305,6 +306,9 @@ thread.interrupt_main() return 0 + def CanExecuteJavaScript(self): + return self.webdriver is not None + def ExecuteJavaScript(self, js_code): return self.webdriver.execute_script(js_code)
diff --git a/src/cobalt/tools/collectd/README.md b/src/cobalt/tools/collectd/README.md new file mode 100644 index 0000000..9148e19 --- /dev/null +++ b/src/cobalt/tools/collectd/README.md
@@ -0,0 +1,67 @@ +### Collectd monitoring setup for Cobalt + +A python plugin that sends Cobalt CVals to [Collectd](https://collectd.org/) +metrics collection daemon. The values are retrieved via WebSocket connection +from Cobalt built-in Chrome DevTools protocol. + + + +Graphs are available from any Collectd frontend, configuration for +[CGP](https://github.com/pommi/CGP) is included. + +**Note**: Currently the plugin only monitors one target, multi-target +connection will be added soon. + +### Installation + +There is a small installation shell script `install.sh` included, that is +tested to work on Raspberry Pi Raspbian Jessie and desktop Ubuntu. To +install and configure, simply run `sudo ./install.sh` from the checkout +directory. + +If you intend to run `collectd` and the CGP web frontend on a Linux +target like Raspberry Pi, please first copy the plugin directory to a +convenient location on the target and run the install script from its shell. + +Note that it is also possible to configure the plugin to connect from host to +remote target like Pi, however this is useful if the rest of the `collectd` +data streams are sent to a host in a [networked configuration](https://collectd.org/wiki/index.php/Networking_introduction) +and not detailed here. + +Cobalt DevTools service currently does not listen on localhost or 127.0.0.1 +address, so you'll need to manually edit cobalt.conf with your local machine +network adapter IP address, or to target IP address. + +**Note**: The script also enables RRD and CSV data outputs, RRD is required +for CGP to display the data and CSV is useful for post-processing. + +After installation, CGP web dashboard will be available at +http://localhost/CGP + +**Note**: Although `collectd` is a system daemon that always runs, the data +from the Cobalt plugin on the web dashboard will not appear before any data +is actually sampled. To do this quickly after the installation, start a +Cobalt instance and restart the `collectd` daemon ( see below ), otherwise +data sampling frequency gets automatically throttled by `collectd`. + +### Troubleshooting + +By default, `collectd` outputs log messages to `syslog`. If there is a +configuration problem, restarting `collectd` daemon and checking syslog usually +indicates the cause + +``` + sudo service collectd restart + tail -n 100 /var/log/syslog | egrep collectd +``` + +Verifying that Cobalt DevTools is listening can be done by shell command + +``` + netstat -an | egrep "^tcp .*LISTEN" +``` + +If the configured port ( 9222 by default ) is listening, the connection +should work. To manually verify that the plugin can connect to WebSocket +and retrieve data, simply run `python cobalt.py` if connecting to localhost +or `python cobalt.py --host <IP> --port 9222` if connecting to a remote target.
diff --git a/src/cobalt/tools/collectd/cobalt-types.db b/src/cobalt/tools/collectd/cobalt-types.db new file mode 100644 index 0000000..43cf2b8 --- /dev/null +++ b/src/cobalt/tools/collectd/cobalt-types.db
@@ -0,0 +1,22 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +lifetime value:DERIVE:0:U +gauge_100 value:GAUGE:U:U +gauge_10k value:GAUGE:U:U +gauge_100k value:GAUGE:U:U +gauge_1M value:GAUGE:U:U +gauge_10M value:GAUGE:U:U +gauge_100M value:GAUGE:U:U +gauge_1G value:GAUGE:U:U
diff --git a/src/cobalt/tools/collectd/cobalt.py b/src/cobalt/tools/collectd/cobalt.py new file mode 100644 index 0000000..dd38f9e --- /dev/null +++ b/src/cobalt/tools/collectd/cobalt.py
@@ -0,0 +1,175 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +import json +import time +import argparse +import random +import websocket + +try: + import collectd +except ImportError: + collectd = None + +conf_ = {'host': 'localhost', 'port': 9222} + + +def config(conf): + print('config called {!r}'.format(conf)) + conf_['collectd_conf'] = conf + collectd.info('config called {!r}'.format(conf)) + + +def reconnect(): + ws = websocket.create_connection('ws://{}:{}'.format(conf_['host'], + conf_['port'])) + ws.settimeout(3) + setattr(ws, 'message_id', 1) + conf_['ws'] = ws + + +def init(): + conf = conf_['collectd_conf'] + for child in conf.children: + collectd.info('conf.child key {} values {}'.format(child.key, child.values)) + if child.key.lower() == 'address': + host, port = child.values[0].split(':') + conf_['host'] = host + conf_['port'] = int(port) + + reconnect() + + +def wait_result(ws, result_id, timeout): + start_time = time.time() + messages = [] + matching_result = None + while True: + now = time.time() + if now - start_time > timeout: + break + try: + message = ws.recv() + parsed_message = json.loads(message) + messages.append(parsed_message) + if 'result' in parsed_message and parsed_message['id'] == result_id: + matching_result = parsed_message + break + except: + break + return (matching_result, messages) + + +def exec_js(ws, expr): + ws.message_id += 1 + call_obj = { + 'id': ws.message_id, + 'method': 'Runtime.evaluate', + 'params': { + 'expression': expr, + 'returnByValue': True + } + } + ws.send(json.dumps(call_obj)) + result, _ = wait_result(ws, ws.message_id, 10) + return result['result']['result'] + + +def report_value(plugin, type, instance, value, plugin_instance=None): + vl = collectd.Values(plugin=plugin, type=type, type_instance=instance) + if plugin_instance: + vl.plugin_instance = plugin_instance + vl.dispatch(values=[value]) + + +def report_cobalt_stat(key, collectd_type): + val = exec_js(conf_['ws'], 'h5vcc.cVal.getValue("' + key + '")') + try: + value = int(val['value']) + # collectd.warning('key {} value: {}'.format(key, value)) + report_value('cobalt', collectd_type, key, value) + except TypeError: + collectd.warning('Failed to collect: {} {}'.format(key, val)) + + +# Tuple of a Cobalt Cval, and data type +# Collectd frontends like CGP group values to graphs by the reported data type. The types here are +# simple gauges grouped by their rough estimated orders of magnitude, so that all plots are still +# somewhat discernible. +tracked_stats = [('Cobalt.Lifetime', 'lifetime'), + ('Count.DOM.ActiveJavaScriptEvents', 'gauge'), + ('Count.DOM.Attrs', 'gauge_10k'), + ('Count.DOM.EventListeners', 'gauge_10k'), + ('Count.DOM.HtmlCollections', 'gauge_10k'), + ('Count.DOM.NodeLists', 'gauge_10k'), + ('Count.DOM.NodeMaps', 'gauge_10k'), + ('Count.DOM.Nodes', 'gauge_10k'), + ('Count.DOM.StringMaps', 'gauge_100'), + ('Count.DOM.TokenLists', 'gauge_10k'), + ('Count.MainWebModule.DOM.HtmlElement', 'gauge_10k'), + ('Count.MainWebModule.DOM.HtmlElement.Document', 'gauge_10k'), + ('Count.MainWebModule.DOM.HtmlScriptElement.Execute', 'gauge'), + ('Count.Renderer.Rasterize.NewRenderTree', 'gauge_100k'), + ('Count.XHR', 'gauge_100'), ('Memory.CPU.Free', 'gauge_1G'), + ('Memory.CPU.Used', 'gauge_100M'), + ('Memory.DebugConsoleWebModule.DOM.HtmlScriptElement.Execute', + 'gauge_100k'), + ('Memory.Font.LocalTypefaceCache.Capacity', 'gauge_10M'), + ('Memory.Font.LocalTypefaceCache.Size', 'gauge_10M'), + ('Memory.JS', 'gauge_10M'), + ('Memory.MainWebModule.DOM.HtmlScriptElement.Execute', + 'gauge_1M'), ('Memory.XHR', 'gauge_1M'), + ('Memory.MainWebModule.ImageCache.Size', 'gauge_10M'), + ('Renderer.SubmissionQueueSize', 'gauge')] + + +def cobalt_read(): + for name, type in tracked_stats: + report_cobalt_stat(name, type) + + +def read(*args, **kwargs): + try: + cobalt_read() + except Exception: + reconnect() + + +if collectd: + collectd.register_config(config) + collectd.register_init(init) + collectd.register_read(read) + + +# Debugcode to verify plugin connection +if __name__ == '__main__': + class Bunch: + def __init__(self, **kwds): + self.__dict__.update(kwds) + def debugprint(*args,**kwargs): + print('{!r} {!r}'.format(args,kwargs)) + def debugvalues(**kwargs): + debugprint(**kwargs) + return Bunch(dispatch=debugprint,**kwargs) + collectd = Bunch(info=debugprint,warning=debugprint,Values=debugvalues) + parser = argparse.ArgumentParser() + parser.add_argument('--host', default='localhost') + parser.add_argument('--port', type=int, default=9222) + args = parser.parse_args() + conf = Bunch(children=[Bunch( key='address', + values=['{}:{}'.format(args.host,args.port)])]) + conf_['collectd_conf'] = conf + init() + cobalt_read()
diff --git a/src/cobalt/tools/collectd/conf/CGP_conf.patch b/src/cobalt/tools/collectd/conf/CGP_conf.patch new file mode 100644 index 0000000..75711a6 --- /dev/null +++ b/src/cobalt/tools/collectd/conf/CGP_conf.patch
@@ -0,0 +1,28 @@ +--- /var/www/html/CGP/conf/config.php 2019-08-07 09:02:26.935953434 -0700 ++++ conf/config.php 2019-08-07 08:41:05.058259144 -0700 +@@ -29,7 +29,7 @@ + #$CONFIG['overview_filter']['interface'] = array('ti' => 'eth0', 't' => 'if_octets'); + + # default plugins time range +-$CONFIG['time_range']['default'] = 86400; ++$CONFIG['time_range']['default'] = 3600 * 2; + $CONFIG['time_range']['uptime'] = 31536000; + + # show load averages and used memory on overview page +@@ -38,6 +38,7 @@ + $CONFIG['showtime'] = false; + + $CONFIG['term'] = array( ++ '30minute'=> 60 * 30, + '2hour' => 3600 * 2, + '8hour' => 3600 * 8, + 'day' => 86400, +@@ -51,7 +52,7 @@ + $CONFIG['network_datasize'] = 'bytes'; + + # "png", "svg", "canvas" or "hybrid" (canvas on detail page, png on the others) graphs +-$CONFIG['graph_type'] = 'png'; ++$CONFIG['graph_type'] = 'hybrid'; + + # For canvas graphs, use 'async' or 'sync' fetch method + $CONFIG['rrd_fetch_method'] = 'sync';
diff --git a/src/cobalt/tools/collectd/conf/cobalt.conf.tmpl b/src/cobalt/tools/collectd/conf/cobalt.conf.tmpl new file mode 100644 index 0000000..96f0a2b --- /dev/null +++ b/src/cobalt/tools/collectd/conf/cobalt.conf.tmpl
@@ -0,0 +1,34 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +<LoadPlugin python> + Globals true + Interval 10 +</LoadPlugin> + +TypesDB "##PLUGIN_DIR##/cobalt-types.db" + +<Plugin python> + ModulePath "##PLUGIN_DIR##" + LogTraces true + Import "cobalt" + <Module cobalt> + Address "localhost:9222" + </Module> +</Plugin> + +# Tell processes plugin to look for processes named "cobalt" +<Plugin "processes"> + ProcessMatch "cobalt" "cobalt" +</Plugin>
diff --git a/src/cobalt/tools/collectd/conf/csv.conf b/src/cobalt/tools/collectd/conf/csv.conf new file mode 100644 index 0000000..f663285 --- /dev/null +++ b/src/cobalt/tools/collectd/conf/csv.conf
@@ -0,0 +1,22 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +<LoadPlugin csv> + Interval 30 +</LoadPlugin> + +<Plugin "csv"> + DataDir "/var/lib/collectd/csv" + StoreRates true +</Plugin>
diff --git a/src/cobalt/tools/collectd/conf/rrd.conf b/src/cobalt/tools/collectd/conf/rrd.conf new file mode 100644 index 0000000..2f96f34 --- /dev/null +++ b/src/cobalt/tools/collectd/conf/rrd.conf
@@ -0,0 +1,21 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +<LoadPlugin rrdtool> + Interval 10 +</LoadPlugin> + +<Plugin rrdtool> + DataDir "/var/lib/collectd/rrd" +</Plugin>
diff --git a/src/cobalt/tools/collectd/conf/standard_types.conf b/src/cobalt/tools/collectd/conf/standard_types.conf new file mode 100644 index 0000000..c95cf60 --- /dev/null +++ b/src/cobalt/tools/collectd/conf/standard_types.conf
@@ -0,0 +1,15 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +TypesDB "/usr/share/collectd/types.db"
diff --git a/src/cobalt/tools/collectd/doc/Collectd_crop.png b/src/cobalt/tools/collectd/doc/Collectd_crop.png new file mode 100644 index 0000000..0161b11 --- /dev/null +++ b/src/cobalt/tools/collectd/doc/Collectd_crop.png Binary files differ
diff --git a/src/cobalt/tools/collectd/install.sh b/src/cobalt/tools/collectd/install.sh new file mode 100755 index 0000000..d2ef017 --- /dev/null +++ b/src/cobalt/tools/collectd/install.sh
@@ -0,0 +1,69 @@ +#!/bin/bash +# +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +if [[ ${EUID} -ne 0 ]]; then + echo "This script must be run as root" + exit 1 +fi + +function print_msg() { + echo '============= ' ${@} ' =============' +} + +WEBROOT=/var/www/html +CGP_ROOT=${WEBROOT}/CGP + +COLLECTD_CONF_DIR=/etc/collectd/collectd.conf.d +RRD_ENABLED=1 +if [[ -d "/etc/collectd/google.conf.d" ]]; then + COLLECTD_CONF_DIR=/etc/collectd/google.conf.d + RRD_ENABLED=0 +fi + + +print_msg "Installing apt deps" +PKGS="collectd-core lighttpd libphp-jpgraph python-websocket" +[[ ! -f /etc/collectd/collectd.conf ]] && PKGS="${PKGS} collectd" +apt install ${PKGS} +# grab the installed php version +CGI_PKG=$(dpkg -l "*php*" | egrep -i "ii.*php.*-cli" | sed -E 's/.*(php.*-)(cli).*/\1cgi/') +apt install ${CGI_PKG} + + +print_msg "Checking out CGP from Github to: " ${CGP_ROOT} +[[ ! -d "${CGP_ROOT}" ]] && git -C ${WEBROOT} clone https://github.com/pommi/CGP.git + + +print_msg "Copying config files" +sed 's@##PLUGIN_DIR##@'"${PWD}"'@' < conf/cobalt.conf.tmpl > /tmp/cobalt.conf +cp -v /tmp/cobalt.conf ${COLLECTD_CONF_DIR}/cobalt.conf + +[[ "${RRD_ENABLED}" -eq "0" ]] && cp -v conf/rrd.conf ${COLLECTD_CONF_DIR}/ +cp -v conf/csv.conf ${COLLECTD_CONF_DIR}/ +# Change graph display defaults in CGP config +patch --forward -r - ${CGP_ROOT}/conf/config.php < conf/CGP_conf.patch +[[ "${RRD_ENABLED}" -eq "1" ]] && cp -v conf/standard_types.conf ${COLLECTD_CONF_DIR}/ + + +print_msg "Restarting services" +lighty-enable-mod fastcgi fastcgi-php +service collectd restart +service lighttpd restart + +print_msg "Cobalt DevTools do not currently listen on 'localhost' or 127.0.0.1" +print_msg "Please manually edit target IP address to your adapter IP address in " ${COLLECTD_CONF_DIR}/cobalt.conf +ifconfig | egrep "inet " | sed -E "s/.*inet (.*) netmask.*/\1/" | egrep -v "127.0.0.1" +
diff --git a/src/cobalt/websocket/cobalt_web_socket_event_handler.cc b/src/cobalt/websocket/cobalt_web_socket_event_handler.cc index b389576..9654695 100644 --- a/src/cobalt/websocket/cobalt_web_socket_event_handler.cc +++ b/src/cobalt/websocket/cobalt_web_socket_event_handler.cc
@@ -110,7 +110,7 @@ std::unique_ptr<net::WebSocketEventInterface::SSLErrorCallbacks> ssl_error_callbacks, const GURL& /*url*/, const net::SSLInfo& /*ssl_info*/, bool /*fatal*/) { - // TODO[johnx]: determine if there are circumstances we want to continue + // TODO: determine if there are circumstances we want to continue // the request. DLOG(WARNING) << "SSL cert failure occured, cancelling connection"; ssl_error_callbacks->CancelSSLRequest(net::ERR_BAD_SSL_CLIENT_AUTH_CERT,
diff --git a/src/cobalt/websocket/web_socket_event_interface.cc b/src/cobalt/websocket/web_socket_event_interface.cc index a323111..f47ad29 100644 --- a/src/cobalt/websocket/web_socket_event_interface.cc +++ b/src/cobalt/websocket/web_socket_event_interface.cc
@@ -106,7 +106,7 @@ void CobaltWebSocketEventHandler::OnSSLCertificateError( std::unique_ptr<net::SSLErrorCallbacks> ssl_error_callbacks, const GURL& /*url*/, const SSLInfo& ssl_info, bool /*fatal*/) { - // TODO[johnx]: determine if there are circumstances we want to continue + // TODO: determine if there are circumstances we want to continue // the request. DLOG(WARNING) << "SSL cert failure occured, cancelling connection"; ssl_error_callbacks->CancelSSLRequest(-1, ssl_info);
diff --git a/src/cobalt/websocket/web_socket_impl.cc b/src/cobalt/websocket/web_socket_impl.cc index 39df930..5a920b4 100644 --- a/src/cobalt/websocket/web_socket_impl.cc +++ b/src/cobalt/websocket/web_socket_impl.cc
@@ -212,7 +212,7 @@ delegate_task_runner_->PostTask(FROM_HERE, do_send_closure); } - // TODO[johnx]:Change to void function? + // TODO: Change to void function? return true; }
diff --git a/src/cobalt/websocket/web_socket_impl.h b/src/cobalt/websocket/web_socket_impl.h index 2786092..2a81b41 100644 --- a/src/cobalt/websocket/web_socket_impl.h +++ b/src/cobalt/websocket/web_socket_impl.h
@@ -72,7 +72,7 @@ void Close(const net::WebSocketError code, const std::string& reason); // These are legacy API from old net::SocketStream::Delegate. - // TODO[johnx]: investigate if we need to remove these. + // TODO: investigate if we need to remove these. // Called when the socket stream has been closed. void OnClose(bool was_clean = true, int error_code = net::kWebSocketNormalClosure,
diff --git a/src/net/cert/caching_cert_verifier.h b/src/net/cert/caching_cert_verifier.h index 2ccc5cb..aacec7e 100644 --- a/src/net/cert/caching_cert_verifier.h +++ b/src/net/cert/caching_cert_verifier.h
@@ -50,6 +50,14 @@ const NetLogWithSource& net_log) override; void SetConfig(const Config& config) override; +#if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) + // Used to disable certificate verification errors for testing/development + // purpose. + void set_ignore_certificate_errors(bool ignore_certificate_errors) override { + verifier_->set_ignore_certificate_errors(ignore_certificate_errors); + } +#endif + private: FRIEND_TEST_ALL_PREFIXES(CachingCertVerifierTest, CacheHit); FRIEND_TEST_ALL_PREFIXES(CachingCertVerifierTest, Visitor);
diff --git a/src/net/cert/cert_verifier.h b/src/net/cert/cert_verifier.h index 7a637bf..df852b1 100644 --- a/src/net/cert/cert_verifier.h +++ b/src/net/cert/cert_verifier.h
@@ -181,6 +181,14 @@ // the preferred underlying cryptographic libraries, using the specified // configuration. static std::unique_ptr<CertVerifier> CreateDefault(); + +#if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) + // Used to disable certificate verification errors for testing/development + // purpose. + virtual void set_ignore_certificate_errors(bool ignore_certificate_errors) { + NOTREACHED(); + } +#endif }; // Overloads for comparing two configurations. Note, comparison is shallow -
diff --git a/src/net/cert/multi_threaded_cert_verifier.cc b/src/net/cert/multi_threaded_cert_verifier.cc index 261c1a3..a513f01 100644 --- a/src/net/cert/multi_threaded_cert_verifier.cc +++ b/src/net/cert/multi_threaded_cert_verifier.cc
@@ -235,7 +235,9 @@ void set_is_first_job(bool is_first_job) { is_first_job_ = is_first_job; } #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) - void set_ignore_errors(bool ignore_errors) { ignore_errors_ = ignore_errors; } + void set_ignore_certificate_errors(bool ignore_certificate_errors) { + ignore_certificate_errors_ = ignore_certificate_errors; + } #endif const CertVerifier::RequestParams& key() const { return key_; } @@ -321,7 +323,7 @@ cert_verifier_->RemoveJob(this); #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) - if (ignore_errors_) { + if (ignore_certificate_errors_) { verify_result->result.verified_cert = key_.certificate(); verify_result->result.cert_status = MapNetErrorToCertStatus(OK); verify_result->error = OK; @@ -358,7 +360,7 @@ bool is_first_job_; #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) - bool ignore_errors_ = false; + bool ignore_certificate_errors_ = false; #endif base::WeakPtrFactory<CertVerifierJob> weak_ptr_factory_; }; @@ -407,7 +409,7 @@ std::unique_ptr<CertVerifierJob> new_job = std::make_unique<CertVerifierJob>(params, net_log.net_log(), this); #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) - new_job->set_ignore_errors(ignore_errors_); + new_job->set_ignore_certificate_errors(ignore_certificate_errors_); #endif new_job->Start(verify_proc_, config_, config_id_);
diff --git a/src/net/cert/multi_threaded_cert_verifier.h b/src/net/cert/multi_threaded_cert_verifier.h index a5cd9dd..b8c6cd0 100644 --- a/src/net/cert/multi_threaded_cert_verifier.h +++ b/src/net/cert/multi_threaded_cert_verifier.h
@@ -68,7 +68,9 @@ #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) // Used to disable certificate verification errors for testing/developerment // purpose. - void set_ignore_errors(bool ignore_errors) { ignore_errors_ = ignore_errors; } + void set_ignore_certificate_errors(bool ignore_certificate_errors) { + ignore_certificate_errors_ = ignore_certificate_errors; + } #endif private: @@ -131,7 +133,7 @@ bool should_record_histograms_ = true; #if defined(STARBOARD) && defined(ENABLE_IGNORE_CERTIFICATE_ERRORS) - bool ignore_errors_ = false; + bool ignore_certificate_errors_ = false; #endif THREAD_CHECKER(thread_checker_);
diff --git a/src/net/http/http_network_session.cc b/src/net/http/http_network_session.cc index e1ff8c6..0415c27 100644 --- a/src/net/http/http_network_session.cc +++ b/src/net/http/http_network_session.cc
@@ -274,7 +274,6 @@ http_stream_factory_(std::make_unique<HttpStreamFactory>(this)), params_(params), context_(context) { - DCHECK(proxy_resolution_service_); DCHECK(ssl_config_service_); CHECK(http_server_properties_); @@ -555,6 +554,12 @@ params_.enable_quic = false; } +#if defined(STARBOARD) +void HttpNetworkSession::ToggleQuic() { + params_.enable_quic = !params_.enable_quic; +} +#endif // defined(STARBOARD) + ClientSocketPoolManager* HttpNetworkSession::GetSocketPoolManager( SocketPoolType pool_type) { switch (pool_type) {
diff --git a/src/net/http/http_network_session.h b/src/net/http/http_network_session.h index 7c72310..ded46f4 100644 --- a/src/net/http/http_network_session.h +++ b/src/net/http/http_network_session.h
@@ -400,6 +400,11 @@ // Disable QUIC for new streams. void DisableQuic(); +#if defined(STARBOARD) + // Toggle QUIC support for new streams. + void ToggleQuic(); +#endif // defined(STARBOARD) + private: friend class HttpNetworkSessionPeer;
diff --git a/src/net/log/net_log_with_source.cc b/src/net/log/net_log_with_source.cc index 50020e5..a4ad7e1 100644 --- a/src/net/log/net_log_with_source.cc +++ b/src/net/log/net_log_with_source.cc
@@ -94,7 +94,6 @@ void NetLogWithSource::AddEventWithNetErrorCode(NetLogEventType event_type, int net_error) const { - DCHECK_NE(ERR_IO_PENDING, net_error); if (net_error >= 0) { AddEvent(event_type); } else {
diff --git a/src/net/socket/udp_socket_starboard.cc b/src/net/socket/udp_socket_starboard.cc index d63b047..707fb74 100644 --- a/src/net/socket/udp_socket_starboard.cc +++ b/src/net/socket/udp_socket_starboard.cc
@@ -163,6 +163,12 @@ &read_socket_watcher_, &read_watcher_)) { PLOG(ERROR) << "WatchSocket failed on read"; Error result = MapLastSocketError(socket_); + if (result == ERR_IO_PENDING) { + // Watch(...) might call SbSocketWaiterAdd() which does not guarantee + // setting system error on failure, but we need to treat this as an + // error since watching the socket failed. + result = ERR_FAILED; + } LogRead(result, NULL, NULL); return result; } @@ -801,7 +807,9 @@ DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); DCHECK(SbSocketIsValid(socket_)); - NOTIMPLEMENTED(); + // Starboard does not supported sending non-fragmented packets yet. + // All QUIC Streams call this function at initialization, setting sockets to + // send non-fragmented packets may have a slight performance boost. return ERR_NOT_IMPLEMENTED; }
diff --git a/src/net/spdy/spdy_proxy_client_socket_unittest.cc b/src/net/spdy/spdy_proxy_client_socket_unittest.cc index 3b7a5b1..8952ca8 100644 --- a/src/net/spdy/spdy_proxy_client_socket_unittest.cc +++ b/src/net/spdy/spdy_proxy_client_socket_unittest.cc
@@ -880,7 +880,11 @@ AssertSyncReadEquals(kMsg2, kLen2); } +#if defined(STARBOARD) +TEST_P(SpdyProxyClientSocketTest, FLAKY_ReadErrorResponseBody) { +#else TEST_P(SpdyProxyClientSocketTest, ReadErrorResponseBody) { +#endif spdy::SpdySerializedFrame conn(ConstructConnectRequestFrame()); MockWrite writes[] = { CreateMockWrite(conn, 0, SYNCHRONOUS),
diff --git a/src/starboard/CHANGELOG.md b/src/starboard/CHANGELOG.md index b9bb48b..b4e9fe3 100644 --- a/src/starboard/CHANGELOG.md +++ b/src/starboard/CHANGELOG.md
@@ -82,7 +82,10 @@ The system properties `kSbSystemPropertyCertificationScope` and `kSbSystemPropertyBase64EncodedCertificationSecret` have been added to enable client apps to perform device authentication. The values will be queried by -calls to `SbSystemGetProperty()` in `starboard/system.h`. +calls to `SbSystemGetProperty()` in `starboard/system.h`. An alternative to +providing the `kSbSystemPropertyBase64EncodedCertificationSecret` property is +to implement the SbSystemSignWithCertificationSecretKey() function, enabling +the key to remain private and secure. ### Add support for `SbThreadSampler` and `SbThreadContext`. @@ -153,6 +156,14 @@ CPU features are available, which can enable the application to perform certain CPU-specific optimizations (e.g. SIMD). +### Deprecated SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER and +SB_HAS_DRM_KEY_STATUSES. + +These macros must always be set to 1 for Starboard version 6 or later. They will +be removed in a future version. Any implementation that supports Starboard +version 6 or later should be modified to no longer depend on these macros, with +the assumption that their values are always 1. + ## Version 10 @@ -622,3 +633,9 @@ ### Mark `SbSystemBreakIntoDebugger` `SB_NORETURN`. Add `SB_NORETURN` to declaration of `SbSystemBreakIntoDebugger`, to allow it to be used in a manner similar to `abort`. + +### Introduce `SbAudioSinkGetMinBufferSizeInFrames()` + +Introduce `SbAudioSinkGetMinBufferSizeInFrames()` to `starboard/audio_sink.h` +which communicates to the platform how many audio frames are required to ensure +that audio sink can keep playing without underflow.
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java index 0a72bc8..2105e5b 100644 --- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java +++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioOutputManager.java
@@ -46,9 +46,9 @@ @SuppressWarnings("unused") @UsedByNative AudioTrackBridge createAudioTrackBridge( - int sampleType, int sampleRate, int channelCount, int framesPerChannel) { + int sampleType, int sampleRate, int channelCount, int preferredBufferSizeInBytes) { AudioTrackBridge audioTrackBridge = - new AudioTrackBridge(sampleType, sampleRate, channelCount, framesPerChannel); + new AudioTrackBridge(sampleType, sampleRate, channelCount, preferredBufferSizeInBytes); if (!audioTrackBridge.isAudioTrackValid()) { Log.e(TAG, "AudioTrackBridge has invalid audio track"); return null;
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java index 733cf2b..ec1fd88 100644 --- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java +++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/AudioTrackBridge.java
@@ -16,6 +16,7 @@ import static dev.cobalt.media.Log.TAG; +import android.annotation.TargetApi; import android.media.AudioAttributes; import android.media.AudioFormat; import android.media.AudioManager; @@ -35,24 +36,8 @@ private AudioTimestamp audioTimestamp = new AudioTimestamp(); private long maxFramePositionSoFar = 0; - private int GetFrameSize(int sampleType, int channelCount) { - switch (sampleType) { - case AudioFormat.ENCODING_PCM_16BIT: - { - return 2 * channelCount; - } - case AudioFormat.ENCODING_PCM_FLOAT: - { - return 4 * channelCount; - } - default: - { - throw new RuntimeException("Unsupported sample type: " + sampleType); - } - } - } - - public AudioTrackBridge(int sampleType, int sampleRate, int channelCount, int framesPerChannel) { + public AudioTrackBridge( + int sampleType, int sampleRate, int channelCount, int preferredBufferSizeInBytes) { int channelConfig; switch (channelCount) { case 1: @@ -80,33 +65,16 @@ .setChannelMask(channelConfig) .build(); - // Try to create AudioTrack with the same size buffer as in renderer. But AudioTrack would not - // start playing until the buffer is fully filled once. A large buffer may cause - // AudioTrack not able to start. And we now pass no more than 1s of audio data to - // starboard player, limit the buffer size to store at most 0.5s of audio data. - int audioTrackBufferSize = - Math.min(framesPerChannel, sampleRate / 2) * GetFrameSize(sampleType, channelCount); + int audioTrackBufferSize = preferredBufferSizeInBytes; while (audioTrackBufferSize > 0) { try { - if (Build.VERSION.SDK_INT >= 26) { - audioTrack = - new AudioTrack.Builder() - .setAudioAttributes(attributes) - .setAudioFormat(format) - .setBufferSizeInBytes(audioTrackBufferSize) - .setTransferMode(AudioTrack.MODE_STREAM) - .setSessionId(AudioManager.AUDIO_SESSION_ID_GENERATE) - .setPerformanceMode(AudioTrack.PERFORMANCE_MODE_LOW_LATENCY) - .build(); - } else { - audioTrack = - new AudioTrack( - attributes, - format, - audioTrackBufferSize, - AudioTrack.MODE_STREAM, - AudioManager.AUDIO_SESSION_ID_GENERATE); - } + audioTrack = + new AudioTrack( + attributes, + format, + audioTrackBufferSize, + AudioTrack.MODE_STREAM, + AudioManager.AUDIO_SESSION_ID_GENERATE); } catch (Exception e) { audioTrack = null; } @@ -120,8 +88,10 @@ Log.i( TAG, String.format( - "AudioTrack created with buffer size %d. The minimum buffer size is %d.", + "AudioTrack created with buffer size %d (prefered: %d). The minimum buffer size is" + + " %d.", audioTrackBufferSize, + preferredBufferSizeInBytes, AudioTrack.getMinBufferSize(sampleRate, channelConfig, sampleType))); } @@ -232,4 +202,23 @@ return audioTimestamp; } + + @SuppressWarnings("unused") + @UsedByNative + private int getUnderrunCount() { + if (Build.VERSION.SDK_INT >= 24) { + return getUnderrunCountV24(); + } + // The funtion getUnderrunCount() is added in API level 24. + return 0; + } + + @TargetApi(24) + private int getUnderrunCountV24() { + if (audioTrack == null) { + Log.e(TAG, "Unable to call getUnderrunCount() with NULL audio track."); + return 0; + } + return audioTrack.getUnderrunCount(); + } }
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java index 8ca2a31..a0e687b 100644 --- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java +++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/CobaltMediaSession.java
@@ -24,12 +24,12 @@ import android.media.AudioAttributes.Builder; import android.media.AudioFocusRequest; import android.media.AudioManager; -import android.media.MediaMetadata; -import android.media.session.MediaSession; -import android.media.session.PlaybackState; import android.os.Build; import android.os.Handler; import android.os.Looper; +import android.support.v4.media.MediaMetadataCompat; +import android.support.v4.media.session.MediaSessionCompat; +import android.support.v4.media.session.PlaybackStateCompat; import android.view.WindowManager; import dev.cobalt.util.DisplayUtil; import dev.cobalt.util.Holder; @@ -47,7 +47,7 @@ // deprecated and unnecessary on API 26+. @SuppressWarnings("deprecation") private static final int MEDIA_SESSION_FLAG_HANDLES_TRANSPORT_CONTROLS = - MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS; + MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS; private AudioFocusRequest audioFocusRequest; @@ -69,15 +69,15 @@ private final UpdateVolumeListener volumeListener; private final ArtworkLoader artworkLoader; - private MediaSession mediaSession; + private MediaSessionCompat mediaSession; // We re-use the builder to hold onto the most recent metadata and add artwork later. - private MediaMetadata.Builder metadataBuilder = new MediaMetadata.Builder(); + private MediaMetadataCompat.Builder metadataBuilder = new MediaMetadataCompat.Builder(); // We re-use the builder to hold onto the most recent playback state. - private PlaybackState.Builder playbackStateBuilder = new PlaybackState.Builder(); + private PlaybackStateCompat.Builder playbackStateBuilder = new PlaybackStateCompat.Builder(); // Duplicated in starboard/android/shared/android_media_session_client.h - // PlaybackState + // PlaybackStateCompat private static final int PLAYBACK_STATE_PLAYING = 0; private static final int PLAYBACK_STATE_PAUSED = 1; private static final int PLAYBACK_STATE_NONE = 2; @@ -99,50 +99,56 @@ } private void setMediaSession() { - mediaSession = new MediaSession(context, TAG); + mediaSession = new MediaSessionCompat(context, TAG); mediaSession.setFlags(MEDIA_SESSION_FLAG_HANDLES_TRANSPORT_CONTROLS); mediaSession.setCallback( - new MediaSession.Callback() { + new MediaSessionCompat.Callback() { @Override public void onFastForward() { Log.i(TAG, "MediaSession action: FAST FORWARD"); - nativeInvokeAction(PlaybackState.ACTION_FAST_FORWARD); + nativeInvokeAction(PlaybackStateCompat.ACTION_FAST_FORWARD); } @Override public void onPause() { Log.i(TAG, "MediaSession action: PAUSE"); - nativeInvokeAction(PlaybackState.ACTION_PAUSE); + nativeInvokeAction(PlaybackStateCompat.ACTION_PAUSE); } @Override public void onPlay() { Log.i(TAG, "MediaSession action: PLAY"); - nativeInvokeAction(PlaybackState.ACTION_PLAY); + nativeInvokeAction(PlaybackStateCompat.ACTION_PLAY); } @Override public void onRewind() { Log.i(TAG, "MediaSession action: REWIND"); - nativeInvokeAction(PlaybackState.ACTION_REWIND); + nativeInvokeAction(PlaybackStateCompat.ACTION_REWIND); } @Override public void onSkipToNext() { Log.i(TAG, "MediaSession action: SKIP NEXT"); - nativeInvokeAction(PlaybackState.ACTION_SKIP_TO_NEXT); + nativeInvokeAction(PlaybackStateCompat.ACTION_SKIP_TO_NEXT); } @Override public void onSkipToPrevious() { Log.i(TAG, "MediaSession action: SKIP PREVIOUS"); - nativeInvokeAction(PlaybackState.ACTION_SKIP_TO_PREVIOUS); + nativeInvokeAction(PlaybackStateCompat.ACTION_SKIP_TO_PREVIOUS); } @Override public void onSeekTo(long pos) { Log.i(TAG, "MediaSession action: SEEK " + pos); - nativeInvokeAction(PlaybackState.ACTION_SEEK_TO, pos); + nativeInvokeAction(PlaybackStateCompat.ACTION_SEEK_TO, pos); + } + + @Override + public void onStop() { + Log.i(TAG, "MediaSession action: STOP"); + nativeInvokeAction(PlaybackStateCompat.ACTION_STOP); } }); // |metadataBuilder| may still have no fields at this point, yielding empty metadata. @@ -209,7 +215,7 @@ // This shouldn't happen, but pause playback to be nice if it does. if (res != AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { Log.w(TAG, "Audiofocus action: PAUSE (not granted)"); - nativeInvokeAction(PlaybackState.ACTION_PAUSE); + nativeInvokeAction(PlaybackStateCompat.ACTION_PAUSE); } } else { if (Build.VERSION.SDK_INT < 26) { @@ -264,7 +270,7 @@ Log.i(TAG, "Audiofocus loss" + logExtra); if (playbackState == PLAYBACK_STATE_PLAYING) { Log.i(TAG, "Audiofocus action: PAUSE"); - nativeInvokeAction(PlaybackState.ACTION_PAUSE); + nativeInvokeAction(PlaybackStateCompat.ACTION_PAUSE); } break; case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK: @@ -281,7 +287,7 @@ volumeListener.onUpdateVolume(1.0f); if (transientPause && playbackState == PLAYBACK_STATE_PAUSED) { Log.i(TAG, "Audiofocus action: PLAY"); - nativeInvokeAction(PlaybackState.ACTION_PLAY); + nativeInvokeAction(PlaybackStateCompat.ACTION_PLAY); } break; default: // fall out @@ -334,7 +340,7 @@ // be none the wiser. playbackStateBuilder.setState( playbackState, - PlaybackState.PLAYBACK_POSITION_UNKNOWN, + PlaybackStateCompat.PLAYBACK_POSITION_UNKNOWN, playbackState == PLAYBACK_STATE_PLAYING ? 1.0f : 0.0f); configureMediaFocus(PLAYBACK_STATE_NONE); } @@ -359,8 +365,7 @@ @Override public void run() { updateMediaSessionInternal( - playbackState, actions, positionMs, speed, - title, artist, album, artwork); + playbackState, actions, positionMs, speed, title, artist, album, artwork); } }); } @@ -398,43 +403,46 @@ String stateName; switch (playbackState) { case PLAYBACK_STATE_PLAYING: - androidPlaybackState = PlaybackState.STATE_PLAYING; + androidPlaybackState = PlaybackStateCompat.STATE_PLAYING; stateName = "PLAYING"; break; case PLAYBACK_STATE_PAUSED: - androidPlaybackState = PlaybackState.STATE_PAUSED; + androidPlaybackState = PlaybackStateCompat.STATE_PAUSED; stateName = "PAUSED"; break; case PLAYBACK_STATE_NONE: default: - androidPlaybackState = PlaybackState.STATE_NONE; + androidPlaybackState = PlaybackStateCompat.STATE_NONE; stateName = "NONE"; break; } - Log.i(TAG, String.format( - "MediaSession state: %s, position: %d ms, speed: %f x", stateName, positionMs, speed)); + Log.i( + TAG, + String.format( + "MediaSession state: %s, position: %d ms, speed: %f x", stateName, positionMs, speed)); playbackStateBuilder = - new PlaybackState.Builder() + new PlaybackStateCompat.Builder() .setActions(actions) .setState(androidPlaybackState, positionMs, speed); mediaSession.setPlaybackState(playbackStateBuilder.build()); // Reset the metadata to make sure we don't retain any fields from previous playback. - metadataBuilder = new MediaMetadata.Builder(); + metadataBuilder = new MediaMetadataCompat.Builder(); metadataBuilder - .putString(MediaMetadata.METADATA_KEY_TITLE, title) - .putString(MediaMetadata.METADATA_KEY_ARTIST, artist) - .putString(MediaMetadata.METADATA_KEY_ALBUM, album) - .putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, artworkLoader.getOrLoadArtwork(artwork)); + .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title) + .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist) + .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album) + .putBitmap( + MediaMetadataCompat.METADATA_KEY_ALBUM_ART, artworkLoader.getOrLoadArtwork(artwork)); // Update the metadata as soon as we can - even before artwork is loaded. mediaSession.setMetadata(metadataBuilder.build()); } @Override public void onArtworkLoaded(Bitmap bitmap) { - metadataBuilder.putBitmap(MediaMetadata.METADATA_KEY_ALBUM_ART, bitmap); + metadataBuilder.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, bitmap); mediaSession.setMetadata(metadataBuilder.build()); } }
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java index 3be35ef..63d27d8 100644 --- a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java +++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/MediaCodecBridge.java
@@ -499,7 +499,10 @@ Log.d(TAG, "Setting HDR info."); mediaFormat.setInteger(MediaFormat.KEY_COLOR_TRANSFER, colorInfo.colorTransfer); mediaFormat.setInteger(MediaFormat.KEY_COLOR_STANDARD, colorInfo.colorStandard); - mediaFormat.setInteger(MediaFormat.KEY_COLOR_RANGE, colorInfo.colorRange); + // If color range is unspecified, don't set it. + if (colorInfo.colorRange != 0) { + mediaFormat.setInteger(MediaFormat.KEY_COLOR_RANGE, colorInfo.colorRange); + } mediaFormat.setByteBuffer(MediaFormat.KEY_HDR_STATIC_INFO, colorInfo.hdrStaticInfo); } @@ -548,28 +551,6 @@ @SuppressWarnings("unused") @UsedByNative - private void dequeueInputBuffer(long timeoutUs, DequeueInputResult outDequeueInputResult) { - int status = MEDIA_CODEC_ERROR; - int index = -1; - try { - int indexOrStatus = mMediaCodec.dequeueInputBuffer(timeoutUs); - if (indexOrStatus >= 0) { // index! - status = MEDIA_CODEC_OK; - index = indexOrStatus; - } else if (indexOrStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { - status = MEDIA_CODEC_DEQUEUE_INPUT_AGAIN_LATER; - } else { - throw new AssertionError("Unexpected index_or_status: " + indexOrStatus); - } - } catch (Exception e) { - Log.e(TAG, "Failed to dequeue input buffer", e); - } - outDequeueInputResult.mStatus = status; - outDequeueInputResult.mIndex = index; - } - - @SuppressWarnings("unused") - @UsedByNative private int flush() { try { mFlushed = true; @@ -778,47 +759,6 @@ } } - @SuppressWarnings({"unused", "deprecation"}) - @UsedByNative - private void dequeueOutputBuffer(long timeoutUs, DequeueOutputResult outDequeueOutputResult) { - int status = MEDIA_CODEC_ERROR; - int index = -1; - try { - int indexOrStatus = mMediaCodec.dequeueOutputBuffer(info, timeoutUs); - if (info.presentationTimeUs < mLastPresentationTimeUs) { - // TODO: return a special code through DequeueOutputResult - // to notify the native code that the frame has a wrong presentation - // timestamp and should be skipped. - info.presentationTimeUs = mLastPresentationTimeUs; - } - mLastPresentationTimeUs = info.presentationTimeUs; - - if (indexOrStatus >= 0) { // index! - status = MEDIA_CODEC_OK; - index = indexOrStatus; - } else if (indexOrStatus == MediaCodec.INFO_OUTPUT_BUFFERS_CHANGED) { - status = MEDIA_CODEC_OUTPUT_BUFFERS_CHANGED; - } else if (indexOrStatus == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { - status = MEDIA_CODEC_OUTPUT_FORMAT_CHANGED; - MediaFormat newFormat = mMediaCodec.getOutputFormat(); - } else if (indexOrStatus == MediaCodec.INFO_TRY_AGAIN_LATER) { - status = MEDIA_CODEC_DEQUEUE_OUTPUT_AGAIN_LATER; - } else { - throw new AssertionError("Unexpected index_or_status: " + indexOrStatus); - } - } catch (IllegalStateException e) { - status = MEDIA_CODEC_ERROR; - Log.e(TAG, "Failed to dequeue output buffer", e); - } - - outDequeueOutputResult.mStatus = status; - outDequeueOutputResult.mIndex = index; - outDequeueOutputResult.mFlags = info.flags; - outDequeueOutputResult.mOffset = info.offset; - outDequeueOutputResult.mPresentationTimeMicroseconds = info.presentationTimeUs; - outDequeueOutputResult.mNumBytes = info.size; - } - @SuppressWarnings("unused") @UsedByNative private boolean configureVideo(
diff --git a/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/VideoSurfaceTexture.java b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/VideoSurfaceTexture.java new file mode 100644 index 0000000..6987021 --- /dev/null +++ b/src/starboard/android/apk/app/src/main/java/dev/cobalt/media/VideoSurfaceTexture.java
@@ -0,0 +1,46 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +package dev.cobalt.media; + +import android.graphics.SurfaceTexture; +import dev.cobalt.util.UsedByNative; + +// A wrapper of SurfaceTexture class. +// VideoSurfaceTexture allows native code to receive OnFrameAvailable event. +@UsedByNative +public class VideoSurfaceTexture extends SurfaceTexture { + @UsedByNative + VideoSurfaceTexture(int texName) { + super(texName); + } + + @UsedByNative + void setOnFrameAvailableListener(final long nativeVideoDecoder) { + super.setOnFrameAvailableListener( + new SurfaceTexture.OnFrameAvailableListener() { + @Override + public void onFrameAvailable(SurfaceTexture surfaceTexture) { + nativeOnFrameAvailable(nativeVideoDecoder); + } + }); + } + + @UsedByNative + void removeOnFrameAvailableListener() { + super.setOnFrameAvailableListener(null); + } + + private native void nativeOnFrameAvailable(long nativeVideoDecoder); +}
diff --git a/src/starboard/android/apk/build.id b/src/starboard/android/apk/build.id index 80c1e89..4c97ae0 100644 --- a/src/starboard/android/apk/build.id +++ b/src/starboard/android/apk/build.id
@@ -1 +1 @@ -217501 \ No newline at end of file +220597 \ No newline at end of file
diff --git a/src/starboard/android/shared/audio_sink_get_min_buffer_size_in_frames.cc b/src/starboard/android/shared/audio_sink_get_min_buffer_size_in_frames.cc new file mode 100644 index 0000000..2bd7c3f --- /dev/null +++ b/src/starboard/android/shared/audio_sink_get_min_buffer_size_in_frames.cc
@@ -0,0 +1,43 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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 "starboard/audio_sink.h" + +#include "starboard/android/shared/audio_track_audio_sink_type.h" +#include "starboard/common/log.h" + +int SbAudioSinkGetMinBufferSizeInFrames(int channels, + SbMediaAudioSampleType sample_type, + int sampling_frequency_hz) { + // Currently, we only use |min_required_frames_| for web audio, which + // only supports 48k mono or stereo sound. + SB_DCHECK(sampling_frequency_hz == 48000); + + if (channels <= 0 || channels > SbAudioSinkGetMaxChannels()) { + SB_LOG(ERROR) << "Not support channels count " << channels; + return -1; + } + if (sample_type != kSbMediaAudioSampleTypeInt16Deprecated && + sample_type != kSbMediaAudioSampleTypeFloat32) { + SB_LOG(ERROR) << "Not support sample type " << sample_type; + return -1; + } + if (sampling_frequency_hz <= 0) { + SB_LOG(ERROR) << "Not support sample frequency " << sampling_frequency_hz; + return -1; + } + + return starboard::android::shared::AudioTrackAudioSinkType:: + GetMinBufferSizeInFrames(channels, sample_type, sampling_frequency_hz); +}
diff --git a/src/starboard/android/shared/audio_sink_min_required_frames_tester.cc b/src/starboard/android/shared/audio_sink_min_required_frames_tester.cc new file mode 100644 index 0000000..e9a87a3 --- /dev/null +++ b/src/starboard/android/shared/audio_sink_min_required_frames_tester.cc
@@ -0,0 +1,224 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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 "starboard/android/shared/audio_sink_min_required_frames_tester.h" + +#include <vector> + +#include "starboard/android/shared/audio_track_audio_sink_type.h" + +namespace starboard { +namespace android { +namespace shared { + +namespace { +const int kCheckpointFramesInterval = 1024; + +// Helper function to compute the size of the two valid starboard audio sample +// types. +size_t GetSampleSize(SbMediaAudioSampleType sample_type) { + switch (sample_type) { + case kSbMediaAudioSampleTypeFloat32: + return sizeof(float); + case kSbMediaAudioSampleTypeInt16Deprecated: + return sizeof(int16_t); + } + SB_NOTREACHED(); + return 0u; +} +} // namespace + +MinRequiredFramesTester::MinRequiredFramesTester(int audio_sink_buffer_size, + int max_required_frames, + int default_required_frames, + int required_frames_increment, + int min_stable_played_frames) + : audio_sink_buffer_size_(audio_sink_buffer_size), + max_required_frames_(max_required_frames), + default_required_frames_(default_required_frames), + required_frames_increment_(required_frames_increment), + min_stable_played_frames_(min_stable_played_frames), + condition_variable_(mutex_), + destroyed_(false) {} + +MinRequiredFramesTester::~MinRequiredFramesTester() { + SB_DCHECK(thread_checker_.CalledOnValidThread()); + destroyed_.store(true); + if (SbThreadIsValid(tester_thread_)) { + { + ScopedLock scoped_lock(mutex_); + condition_variable_.Signal(); + } + SbThreadJoin(tester_thread_, NULL); + tester_thread_ = kSbThreadInvalid; + } +} + +void MinRequiredFramesTester::StartTest( + int number_of_channels, + SbMediaAudioSampleType sample_type, + int sample_rate, + OnMinRequiredFramesReceivedCallback received_cb) { + SB_DCHECK(thread_checker_.CalledOnValidThread()); + // MinRequiredFramesTester only supports to do test once now. + SB_DCHECK(!SbThreadIsValid(tester_thread_)); + + number_of_channels_ = number_of_channels; + sample_type_ = sample_type; + sample_rate_ = sample_rate; + received_cb_ = received_cb; + + tester_thread_ = + SbThreadCreate(0, kSbThreadPriorityLowest, kSbThreadNoAffinity, true, + "audio_track_tester", + &MinRequiredFramesTester::TesterThreadEntryPoint, this); + SB_DCHECK(SbThreadIsValid(tester_thread_)); +} + +// static +void* MinRequiredFramesTester::TesterThreadEntryPoint(void* context) { + SB_DCHECK(context); + MinRequiredFramesTester* tester = + static_cast<MinRequiredFramesTester*>(context); + tester->TesterThreadFunc(); + return NULL; +} + +void MinRequiredFramesTester::TesterThreadFunc() { + bool wait_timeout = false; + // Currently, we only support test once. But we can put following codes in + // a for loop easily to support test multiple times. + std::vector<uint8_t> silence_buffer( + max_required_frames_ * number_of_channels_ * GetSampleSize(sample_type_), + 0); + void* frame_buffers[1]; + frame_buffers[0] = silence_buffer.data(); + // Set default values. + min_required_frames_ = default_required_frames_; + total_consumed_frames_ = 0; + last_underrun_count_ = -1; + last_total_consumed_frames_ = 0; + { + ScopedLock scoped_lock(mutex_); + // Need to check |destroyed_| before start, as MinRequiredFramesTester may + // be destroyed immediately after tester thread started. + if (!destroyed_.load()) { + audio_sink_ = new AudioTrackAudioSink( + NULL, number_of_channels_, sample_rate_, sample_type_, frame_buffers, + max_required_frames_, + audio_sink_buffer_size_ * number_of_channels_ * + GetSampleSize(sample_type_), + &MinRequiredFramesTester::UpdateSourceStatusFunc, + &MinRequiredFramesTester::ConsumeFramesFunc, this); + wait_timeout = !condition_variable_.WaitTimed(kSbTimeSecond * 5); + if (wait_timeout) { + SB_LOG(ERROR) << "Audio sink min required frames tester timeout."; + SB_NOTREACHED(); + } + } + } + delete audio_sink_; + audio_sink_ = nullptr; + // Call |received_cb_| after audio sink thread is ended. + // |number_of_channels_|, |sample_type_|, |sample_rate_| and + // |min_required_frames_| are shared between two threads. + if (!destroyed_.load() && !wait_timeout) { + received_cb_(number_of_channels_, sample_type_, sample_rate_, + min_required_frames_); + } +} + +// static +void MinRequiredFramesTester::UpdateSourceStatusFunc(int* frames_in_buffer, + int* offset_in_frames, + bool* is_playing, + bool* is_eos_reached, + void* context) { + MinRequiredFramesTester* tester = + static_cast<MinRequiredFramesTester*>(context); + SB_DCHECK(tester); + SB_DCHECK(frames_in_buffer); + SB_DCHECK(offset_in_frames); + SB_DCHECK(is_playing); + SB_DCHECK(is_eos_reached); + + tester->UpdateSourceStatus(frames_in_buffer, offset_in_frames, is_playing, + is_eos_reached); +} + +// static +void MinRequiredFramesTester::ConsumeFramesFunc(int frames_consumed, + SbTime frames_consumed_at, + void* context) { + SB_UNREFERENCED_PARAMETER(frames_consumed_at); + + MinRequiredFramesTester* tester = + static_cast<MinRequiredFramesTester*>(context); + SB_DCHECK(tester); + + tester->ConsumeFrames(frames_consumed); +} + +void MinRequiredFramesTester::UpdateSourceStatus(int* frames_in_buffer, + int* offset_in_frames, + bool* is_playing, + bool* is_eos_reached) { + *frames_in_buffer = min_required_frames_; + *offset_in_frames = 0; + *is_playing = true; + *is_eos_reached = false; +} + +void MinRequiredFramesTester::ConsumeFrames(int frames_consumed) { + total_consumed_frames_ += frames_consumed; + // Wait until played enough frames. + if (total_consumed_frames_ - kCheckpointFramesInterval < + last_total_consumed_frames_) { + return; + } + if (last_underrun_count_ == -1) { + // |last_underrun_count_| is unknown, record the current underrun count + // and start to observe the underrun count. + last_underrun_count_ = audio_sink_->GetUnderrunCount(); + last_total_consumed_frames_ = total_consumed_frames_; + return; + } + // The playback should be played for a while. If we still get new underruns, + // we need to write more buffers into audio sink. + int underrun_count = audio_sink_->GetUnderrunCount(); + if (underrun_count > last_underrun_count_) { + min_required_frames_ += required_frames_increment_; + if (min_required_frames_ >= max_required_frames_) { + SB_LOG(WARNING) << "Min required frames reached maximum."; + } else { + last_underrun_count_ = -1; + last_total_consumed_frames_ = total_consumed_frames_; + return; + } + } + + if (min_required_frames_ >= max_required_frames_ || + total_consumed_frames_ - min_stable_played_frames_ >= + last_total_consumed_frames_) { + // |min_required_frames_| reached maximum, or playback is stable and + // doesn't have underruns. Stop the test. + last_total_consumed_frames_ = INT_MAX; + ScopedLock scoped_lock(mutex_); + condition_variable_.Signal(); + } +} + +} // namespace shared +} // namespace android +} // namespace starboard
diff --git a/src/starboard/android/shared/audio_sink_min_required_frames_tester.h b/src/starboard/android/shared/audio_sink_min_required_frames_tester.h new file mode 100644 index 0000000..9e53134 --- /dev/null +++ b/src/starboard/android/shared/audio_sink_min_required_frames_tester.h
@@ -0,0 +1,109 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +#ifndef STARBOARD_ANDROID_SHARED_AUDIO_SINK_MIN_REQUIRED_FRAMES_TESTER_H_ +#define STARBOARD_ANDROID_SHARED_AUDIO_SINK_MIN_REQUIRED_FRAMES_TESTER_H_ + +#include <atomic> +#include <functional> + +#include "starboard/common/condition_variable.h" +#include "starboard/common/mutex.h" +#include "starboard/media.h" +#include "starboard/shared/starboard/thread_checker.h" +#include "starboard/thread.h" + +namespace starboard { +namespace android { +namespace shared { + +class AudioTrackAudioSink; + +// The class is to detect min required frames for audio sink to play audio +// without underflow. +class MinRequiredFramesTester { + public: + typedef std::function<void(int number_of_channels, + SbMediaAudioSampleType sample_type, + int sample_rate, + int min_required_frames)> + OnMinRequiredFramesReceivedCallback; + + MinRequiredFramesTester(int audio_sink_buffer_size, + int max_required_frames, + int default_required_frames, + int required_frames_increment, + int min_stable_played_frames); + ~MinRequiredFramesTester(); + + void StartTest(int number_of_channels, + SbMediaAudioSampleType sample_type, + int sample_rate, + OnMinRequiredFramesReceivedCallback received_cb); + + private: + static void* TesterThreadEntryPoint(void* context); + void TesterThreadFunc(); + + static void UpdateSourceStatusFunc(int* frames_in_buffer, + int* offset_in_frames, + bool* is_playing, + bool* is_eos_reached, + void* context); + static void ConsumeFramesFunc(int frames_consumed, + SbTime frames_consumed_at, + void* context); + void UpdateSourceStatus(int* frames_in_buffer, + int* offset_in_frames, + bool* is_playing, + bool* is_eos_reached); + void ConsumeFrames(int frames_consumed); + + MinRequiredFramesTester(const MinRequiredFramesTester&) = delete; + MinRequiredFramesTester& operator=(const MinRequiredFramesTester&) = delete; + + const int audio_sink_buffer_size_; + const int max_required_frames_; + const int default_required_frames_; + const int required_frames_increment_; + const int min_stable_played_frames_; + + ::starboard::shared::starboard::ThreadChecker thread_checker_; + + // Shared variables between tester thread and audio sink thread. + AudioTrackAudioSink* audio_sink_ = nullptr; + int number_of_channels_; + SbMediaAudioSampleType sample_type_; + int sample_rate_; + int min_required_frames_; + + // Used only by tester thread. + OnMinRequiredFramesReceivedCallback received_cb_; + + // Used only by audio sink thread. + int total_consumed_frames_; + int last_underrun_count_; + int last_total_consumed_frames_; + + Mutex mutex_; + ConditionVariable condition_variable_; + SbThread tester_thread_ = kSbThreadInvalid; + std::atomic_bool destroyed_; +}; + +} // namespace shared +} // namespace android +} // namespace starboard + +#endif // STARBOARD_ANDROID_SHARED_AUDIO_SINK_MIN_REQUIRED_FRAMES_TESTER_H_
diff --git a/src/starboard/android/shared/audio_track_audio_sink_type.cc b/src/starboard/android/shared/audio_track_audio_sink_type.cc index 24f1c5f..994d904 100644 --- a/src/starboard/android/shared/audio_track_audio_sink_type.cc +++ b/src/starboard/android/shared/audio_track_audio_sink_type.cc
@@ -15,13 +15,12 @@ #include "starboard/android/shared/audio_track_audio_sink_type.h" #include <algorithm> -#include <deque> +#include <vector> -#include "starboard/android/shared/jni_env_ext.h" -#include "starboard/android/shared/jni_utils.h" -#include "starboard/common/mutex.h" -#include "starboard/common/scoped_ptr.h" -#include "starboard/thread.h" +namespace { +starboard::android::shared::AudioTrackAudioSinkType* + audio_track_audio_sink_type_; +} namespace starboard { namespace android { @@ -33,13 +32,14 @@ // we will repeatedly allocate a large byte array which cannot be consumed by // audio track completely. const int kMaxFramesPerRequest = 65536; - const jint kNoOffset = 0; - const size_t kSilenceFramesPerAppend = 1024; -// 6 (max channels) * 4 (max sample size) * kSilenceFramesPerAppend, the number -// is to ensure we always have at least 1024 frames silence to write. -const uint8_t kSilenceBuffer[24 * kSilenceFramesPerAppend] = {0}; + +const int kAudioSinkBufferSize = 4 * 1024; +const int kMaxRequiredFrames = 16 * 1024; +const int kDefaultRequiredFrames = 8 * 1024; +const int kRequiredFramesIncrement = 2 * 1024; +const int kMinStablePlayedFrames = 12 * 1024; // Helper function to compute the size of the two valid starboard audio sample // types. @@ -71,62 +71,7 @@ return static_cast<uint8_t*>(pointer) + offset; } -class AudioTrackAudioSink : public SbAudioSinkPrivate { - public: - AudioTrackAudioSink( - Type* type, - int channels, - int sampling_frequency_hz, - SbMediaAudioSampleType sample_type, - SbAudioSinkFrameBuffers frame_buffers, - int frames_per_channel, - SbAudioSinkUpdateSourceStatusFunc update_source_status_func, - SbAudioSinkConsumeFramesFunc consume_frame_func, - void* context); - ~AudioTrackAudioSink() override; - - bool IsAudioTrackValid() const { return j_audio_track_bridge_; } - bool IsType(Type* type) override { return type_ == type; } - void SetPlaybackRate(double playback_rate) override { - SB_DCHECK(playback_rate >= 0.0); - if (playback_rate != 0.0 && playback_rate != 1.0) { - SB_NOTIMPLEMENTED() << "TODO: Only playback rates of 0.0 and 1.0 are " - "currently supported."; - playback_rate = (playback_rate > 0.0) ? 1.0 : 0.0; - } - ScopedLock lock(mutex_); - playback_rate_ = playback_rate; - } - - void SetVolume(double volume) override; - - private: - static void* ThreadEntryPoint(void* context); - void AudioThreadFunc(); - - int WriteData(JniEnvExt* env, const void* buffer, int size); - - Type* type_; - int channels_; - int sampling_frequency_hz_; - SbMediaAudioSampleType sample_type_; - void* frame_buffer_; - int frames_per_channel_; - SbAudioSinkUpdateSourceStatusFunc update_source_status_func_; - SbAudioSinkConsumeFramesFunc consume_frame_func_; - void* context_; - int last_playback_head_position_; - jobject j_audio_track_bridge_; - jobject j_audio_data_; - - volatile bool quit_; - SbThread audio_out_thread_; - - starboard::Mutex mutex_; - double playback_rate_; - - int written_frames_; -}; +} // namespace AudioTrackAudioSink::AudioTrackAudioSink( Type* type, @@ -135,6 +80,7 @@ SbMediaAudioSampleType sample_type, SbAudioSinkFrameBuffers frame_buffers, int frames_per_channel, + int preferred_buffer_size, SbAudioSinkUpdateSourceStatusFunc update_source_status_func, SbAudioSinkConsumeFramesFunc consume_frame_func, void* context) @@ -167,7 +113,7 @@ j_audio_output_manager.Get(), "createAudioTrackBridge", "(IIII)Ldev/cobalt/media/AudioTrackBridge;", GetAudioFormatSampleType(sample_type_), sampling_frequency_hz_, channels_, - frames_per_channel); + preferred_buffer_size); if (!j_audio_track_bridge) { return; } @@ -214,6 +160,17 @@ } } +void AudioTrackAudioSink::SetPlaybackRate(double playback_rate) { + SB_DCHECK(playback_rate >= 0.0); + if (playback_rate != 0.0 && playback_rate != 1.0) { + SB_NOTIMPLEMENTED() << "TODO: Only playback rates of 0.0 and 1.0 are " + "currently supported."; + playback_rate = (playback_rate > 0.0) ? 1.0 : 0.0; + } + ScopedLock lock(mutex_); + playback_rate_ = playback_rate; +} + // static void* AudioTrackAudioSink::ThreadEntryPoint(void* context) { SB_DCHECK(context); @@ -305,8 +262,11 @@ // its buffer is fully filled once. if (is_eos_reached) { // Currently AudioDevice and AudioRenderer will write tail silence. - // It should be reached only in tests. - WriteData(env, kSilenceBuffer, kSilenceFramesPerAppend); + // It should be reached only in tests. It's not ideal to allocate + // a new silence buffer every time. + std::vector<uint8_t> silence_buffer( + channels_ * GetSampleSize(sample_type_) * kSilenceFramesPerAppend); + WriteData(env, silence_buffer.data(), kSilenceFramesPerAppend); } SbThreadSleep(10 * kSbTimeMillisecond); continue; @@ -384,7 +344,30 @@ } } -} // namespace +int AudioTrackAudioSink::GetUnderrunCount() { + auto* env = JniEnvExt::Get(); + jint underrun_count = env->CallIntMethodOrAbort(j_audio_track_bridge_, + "getUnderrunCount", "()I"); + return underrun_count; +} + +// static +int AudioTrackAudioSinkType::GetMinBufferSizeInFrames( + int channels, + SbMediaAudioSampleType sample_type, + int sampling_frequency_hz) { + SB_DCHECK(audio_track_audio_sink_type_); + + return audio_track_audio_sink_type_->min_required_frames_.load(); +} + +AudioTrackAudioSinkType::AudioTrackAudioSinkType() + : min_required_frames_tester_(kAudioSinkBufferSize, + kMaxRequiredFrames, + kDefaultRequiredFrames, + kRequiredFramesIncrement, + kMinStablePlayedFrames), + min_required_frames_(kMaxRequiredFrames) {} SbAudioSink AudioTrackAudioSinkType::Create( int channels, @@ -396,10 +379,18 @@ SbAudioSinkUpdateSourceStatusFunc update_source_status_func, SbAudioSinkConsumeFramesFunc consume_frames_func, void* context) { + // Try to create AudioTrack with the same size buffer as in renderer. But + // AudioTrack would not start playing until the buffer is fully filled once. A + // large buffer may cause AudioTrack not able to start. And Cobalt now write + // no more than 1s of audio data and no more than 0.5 ahead to starboard + // player, limit the buffer size to store at most 0.5s of audio data. + int preferred_buffer_size = + std::min(frames_per_channel, sampling_frequency_hz / 2) * channels * + GetSampleSize(audio_sample_type); AudioTrackAudioSink* audio_sink = new AudioTrackAudioSink( this, channels, sampling_frequency_hz, audio_sample_type, frame_buffers, - frames_per_channel, update_source_status_func, consume_frames_func, - context); + frames_per_channel, preferred_buffer_size, update_source_status_func, + consume_frames_func, context); if (!audio_sink->IsAudioTrackValid()) { SB_DLOG(ERROR) << "AudioTrackAudioSinkType::Create failed to create audio track"; @@ -409,14 +400,33 @@ return audio_sink; } +void AudioTrackAudioSinkType::TestMinRequiredFrames() { + auto onMinRequiredFramesForWebAudioReceived = + [&](int number_of_channels, SbMediaAudioSampleType sample_type, + int sample_rate, int min_required_frames) { + SB_LOG(INFO) << "Received min required frames " << min_required_frames + << " for " << number_of_channels << " channels, " + << sample_rate << "hz."; + min_required_frames_.store(min_required_frames); + }; + + SbMediaAudioSampleType sample_type = kSbMediaAudioSampleTypeFloat32; + if (!SbAudioSinkIsAudioSampleTypeSupported(sample_type)) { + sample_type = kSbMediaAudioSampleTypeInt16Deprecated; + SB_DCHECK(SbAudioSinkIsAudioSampleTypeSupported(sample_type)); + } + + // Currently, cobalt only use |min_required_frames_| for web audio, which + // only supports 48k mono or stereo sound. It should be fine now to only + // test 48k stereo sound. + min_required_frames_tester_.StartTest(2, sample_type, 48000, + onMinRequiredFramesForWebAudioReceived); +} + } // namespace shared } // namespace android } // namespace starboard -namespace { -SbAudioSinkPrivate::Type* audio_track_audio_sink_type_; -} // namespace - // static void SbAudioSinkPrivate::PlatformInitialize() { SB_DCHECK(!audio_track_audio_sink_type_); @@ -424,6 +434,7 @@ new starboard::android::shared::AudioTrackAudioSinkType; SetPrimaryType(audio_track_audio_sink_type_); EnableFallbackToStub(); + audio_track_audio_sink_type_->TestMinRequiredFrames(); } // static
diff --git a/src/starboard/android/shared/audio_track_audio_sink_type.h b/src/starboard/android/shared/audio_track_audio_sink_type.h index ef53d9f..821a146 100644 --- a/src/starboard/android/shared/audio_track_audio_sink_type.h +++ b/src/starboard/android/shared/audio_track_audio_sink_type.h
@@ -15,11 +15,20 @@ #ifndef STARBOARD_ANDROID_SHARED_AUDIO_TRACK_AUDIO_SINK_TYPE_H_ #define STARBOARD_ANDROID_SHARED_AUDIO_TRACK_AUDIO_SINK_TYPE_H_ +#include <atomic> +#include <functional> + +#include "starboard/android/shared/audio_sink_min_required_frames_tester.h" +#include "starboard/android/shared/jni_env_ext.h" +#include "starboard/android/shared/jni_utils.h" #include "starboard/audio_sink.h" #include "starboard/common/log.h" +#include "starboard/common/mutex.h" +#include "starboard/common/scoped_ptr.h" #include "starboard/configuration.h" #include "starboard/shared/internal_only.h" #include "starboard/shared/starboard/audio_sink/audio_sink_internal.h" +#include "starboard/thread.h" namespace starboard { namespace android { @@ -27,6 +36,12 @@ class AudioTrackAudioSinkType : public SbAudioSinkPrivate::Type { public: + static int GetMinBufferSizeInFrames(int channels, + SbMediaAudioSampleType sample_type, + int sampling_frequency_hz); + + AudioTrackAudioSinkType(); + SbAudioSink Create( int channels, int sampling_frequency_hz, @@ -49,6 +64,62 @@ } delete audio_sink; } + + void TestMinRequiredFrames(); + + private: + std::atomic_int min_required_frames_; + MinRequiredFramesTester min_required_frames_tester_; +}; + +class AudioTrackAudioSink : public SbAudioSinkPrivate { + public: + AudioTrackAudioSink( + Type* type, + int channels, + int sampling_frequency_hz, + SbMediaAudioSampleType sample_type, + SbAudioSinkFrameBuffers frame_buffers, + int frames_per_channel, + int preferred_buffer_size, + SbAudioSinkUpdateSourceStatusFunc update_source_status_func, + SbAudioSinkConsumeFramesFunc consume_frame_func, + void* context); + ~AudioTrackAudioSink() override; + + bool IsAudioTrackValid() const { return j_audio_track_bridge_; } + bool IsType(Type* type) override { return type_ == type; } + void SetPlaybackRate(double playback_rate) override; + + void SetVolume(double volume) override; + int GetUnderrunCount(); + + private: + static void* ThreadEntryPoint(void* context); + void AudioThreadFunc(); + + int WriteData(JniEnvExt* env, const void* buffer, int size); + + Type* type_; + int channels_; + int sampling_frequency_hz_; + SbMediaAudioSampleType sample_type_; + void* frame_buffer_; + int frames_per_channel_; + SbAudioSinkUpdateSourceStatusFunc update_source_status_func_; + SbAudioSinkConsumeFramesFunc consume_frame_func_; + void* context_; + int last_playback_head_position_; + jobject j_audio_track_bridge_; + jobject j_audio_data_; + + volatile bool quit_; + SbThread audio_out_thread_; + + starboard::Mutex mutex_; + double playback_rate_; + + int written_frames_; }; } // namespace shared
diff --git a/src/starboard/android/shared/cobalt/android_media_session_client.cc b/src/starboard/android/shared/cobalt/android_media_session_client.cc index 87f4f9f..0b4b5c1 100644 --- a/src/starboard/android/shared/cobalt/android_media_session_client.cc +++ b/src/starboard/android/shared/cobalt/android_media_session_client.cc
@@ -23,7 +23,6 @@ #include "starboard/common/log.h" #include "starboard/common/mutex.h" #include "starboard/once.h" -#include "starboard/player.h" namespace starboard { namespace android { @@ -43,6 +42,7 @@ using ::cobalt::media_session::kMediaSessionActionSeekto; using ::cobalt::media_session::kMediaSessionActionSeekbackward; using ::cobalt::media_session::kMediaSessionActionSeekforward; +using ::cobalt::media_session::kMediaSessionActionStop; using ::cobalt::media_session::kMediaSessionActionPrevioustrack; using ::cobalt::media_session::kMediaSessionActionNexttrack; using ::cobalt::media_session::kMediaSessionPlaybackStateNone; @@ -57,7 +57,7 @@ namespace { // These constants are from android.media.session.PlaybackState -const jlong kPlaybackStateActionStop = 1 << 0; // not supported +const jlong kPlaybackStateActionStop = 1 << 0; const jlong kPlaybackStateActionPause = 1 << 1; const jlong kPlaybackStateActionPlay = 1 << 2; const jlong kPlaybackStateActionRewind = 1 << 3; @@ -93,6 +93,9 @@ if (actions[kMediaSessionActionSeekto]) { result |= kPlaybackStateActionSeekTo; } + if (actions[kMediaSessionActionStop]) { + result |= kPlaybackStateActionStop; + } return result; } @@ -132,6 +135,9 @@ case kPlaybackStateActionSeekTo: result = kMediaSessionActionSeekto; break; + case kPlaybackStateActionStop: + result = kMediaSessionActionStop; + break; default: SB_NOTREACHED() << "Unsupported MediaSessionAction 0x" << std::hex << action; @@ -171,10 +177,6 @@ // Protected by "mutex" static AndroidMediaSessionClient* active_client; - // TODO: Pass the necessary info through web MediaSession so we don't need to - // short-circuit to the player implementation to get info about the playback. - static SbPlayer active_player; - static void OnceInit() { SbMutexCreate(&mutex); } public: @@ -208,15 +210,6 @@ SbMutexRelease(&mutex); } - static void UpdateActiveSessionPlatformPlayer(SbPlayer player) { - SbOnce(&once_flag, OnceInit); - SbMutexAcquire(&mutex); - - active_player = player; - - SbMutexRelease(&mutex); - } - AndroidMediaSessionClient() {} virtual ~AndroidMediaSessionClient() { @@ -242,12 +235,6 @@ } else if (active_client == this) { active_client = NULL; } - - SbPlayerInfo2 player_info; - SbMemorySet(&player_info, 0, sizeof(player_info)); - if (active_player != kSbPlayerInvalid) { - SbPlayerGetInfo2(active_player, &player_info); - } SbMutexRelease(&mutex); jlong playback_state_actions = MediaSessionActionsToPlaybackStateActions( @@ -307,8 +294,8 @@ "(IJJFLjava/lang/String;Ljava/lang/String;Ljava/lang/String;" "[Ldev/cobalt/media/MediaImage;)V", playback_state, playback_state_actions, - player_info.current_media_timestamp / kSbTimeMillisecond, - static_cast<jfloat>(player_info.playback_rate), + session_state.current_playback_position() / kSbTimeMillisecond, + static_cast<jfloat>(session_state.actual_playback_rate()), j_title.Get(), j_artist.Get(), j_album.Get(), j_artwork.Get()); } }; @@ -316,7 +303,6 @@ SbOnceControl AndroidMediaSessionClient::once_flag = SB_ONCE_INITIALIZER; SbMutex AndroidMediaSessionClient::mutex; AndroidMediaSessionClient* AndroidMediaSessionClient::active_client = NULL; -SbPlayer AndroidMediaSessionClient::active_player = kSbPlayerInvalid; void UpdateActiveSessionPlatformPlaybackState(PlaybackState state) { MediaSessionPlaybackState media_session_state = @@ -326,10 +312,6 @@ media_session_state); } -void UpdateActiveSessionPlatformPlayer(SbPlayer player) { - AndroidMediaSessionClient::UpdateActiveSessionPlatformPlayer(player); -} - } // namespace cobalt } // namespace shared } // namespace android
diff --git a/src/starboard/android/shared/cobalt/android_media_session_client.h b/src/starboard/android/shared/cobalt/android_media_session_client.h index 284e165..5fc3f41 100644 --- a/src/starboard/android/shared/cobalt/android_media_session_client.h +++ b/src/starboard/android/shared/cobalt/android_media_session_client.h
@@ -15,8 +15,6 @@ #ifndef STARBOARD_ANDROID_SHARED_COBALT_ANDROID_MEDIA_SESSION_CLIENT_H_ #define STARBOARD_ANDROID_SHARED_COBALT_ANDROID_MEDIA_SESSION_CLIENT_H_ -#include "starboard/player.h" - namespace starboard { namespace android { namespace shared { @@ -27,10 +25,6 @@ void UpdateActiveSessionPlatformPlaybackState(PlaybackState state); -// TODO: Pass the necessary info through web MediaSession so we don't need to -// short-circuit to the player implementation to get info about the playback. -void UpdateActiveSessionPlatformPlayer(SbPlayer player); - } // namespace cobalt } // namespace shared } // namespace android
diff --git a/src/starboard/android/shared/decode_target_create.cc b/src/starboard/android/shared/decode_target_create.cc index 9b6f900..f54f90b 100644 --- a/src/starboard/android/shared/decode_target_create.cc +++ b/src/starboard/android/shared/decode_target_create.cc
@@ -37,7 +37,7 @@ JniEnvExt* env = JniEnvExt::Get(); jobject local_surface_texture = env->NewObjectOrAbort( - "android/graphics/SurfaceTexture", "(I)V", gl_texture_id); + "dev/cobalt/media/VideoSurfaceTexture", "(I)V", gl_texture_id); jobject global_surface_texture = env->ConvertLocalRefToGlobalRef(local_surface_texture);
diff --git a/src/starboard/android/shared/drm_system.cc b/src/starboard/android/shared/drm_system.cc index d1212c6..943633e 100644 --- a/src/starboard/android/shared/drm_system.cc +++ b/src/starboard/android/shared/drm_system.cc
@@ -36,6 +36,26 @@ const jint MEDIA_DRM_KEY_STATUS_PENDING = 3; const jint MEDIA_DRM_KEY_STATUS_USABLE = 0; +// They must have the same values as defined in MediaDrm.KeyRequest. +const jint REQUEST_TYPE_INITIAL = 0; +const jint REQUEST_TYPE_RENEWAL = 1; +const jint REQUEST_TYPE_RELEASE = 2; + +SbDrmSessionRequestType SbDrmSessionRequestTypeFromMediaDrmKeyRequestType( + jint request_type) { + if (request_type == REQUEST_TYPE_INITIAL) { + return kSbDrmSessionRequestTypeLicenseRequest; + } + if (request_type == REQUEST_TYPE_RENEWAL) { + return kSbDrmSessionRequestTypeLicenseRenewal; + } + if (request_type == REQUEST_TYPE_RELEASE) { + return kSbDrmSessionRequestTypeLicenseRelease; + } + SB_NOTREACHED(); + return kSbDrmSessionRequestTypeLicenseRequest; +} + } // namespace // This has to be defined outside the above anonymous namespace to be picked up @@ -68,9 +88,10 @@ DrmSystem* drm_system = reinterpret_cast<DrmSystem*>(native_media_drm_bridge); SB_DCHECK(drm_system); - drm_system->CallUpdateRequestCallback(ticket, session_id_elements, - session_id_size, message_elements, - message_size, kNoUrl); + drm_system->CallUpdateRequestCallback( + ticket, SbDrmSessionRequestTypeFromMediaDrmKeyRequestType(request_type), + session_id_elements, session_id_size, message_elements, message_size, + kNoUrl); env->ReleaseByteArrayElements(j_session_id, session_id_elements, JNI_ABORT); env->ReleaseByteArrayElements(j_message, message_elements, JNI_ABORT); } @@ -255,15 +276,15 @@ } void DrmSystem::CallUpdateRequestCallback(int ticket, + SbDrmSessionRequestType request_type, const void* session_id, int session_id_size, const void* content, int content_size, const char* url) { update_request_callback_(this, context_, ticket, kSbDrmStatusSuccess, - kSbDrmSessionRequestTypeLicenseRequest, NULL, - session_id, session_id_size, content, content_size, - url); + request_type, NULL, session_id, session_id_size, + content, content_size, url); } void DrmSystem::CallDrmSessionKeyStatusesChangedCallback(
diff --git a/src/starboard/android/shared/drm_system.h b/src/starboard/android/shared/drm_system.h index 49d5c72..9bdd875 100644 --- a/src/starboard/android/shared/drm_system.h +++ b/src/starboard/android/shared/drm_system.h
@@ -61,6 +61,7 @@ jobject GetMediaCrypto() const { return j_media_crypto_; } void CallUpdateRequestCallback(int ticket, + SbDrmSessionRequestType request_type, const void* session_id, int session_id_size, const void* content,
diff --git a/src/starboard/android/shared/gyp_configuration.py b/src/starboard/android/shared/gyp_configuration.py index d674f72..8fc3c9b 100644 --- a/src/starboard/android/shared/gyp_configuration.py +++ b/src/starboard/android/shared/gyp_configuration.py
@@ -274,30 +274,13 @@ # A map of failing or crashing tests per target. __FILTERED_TESTS = { # pylint: disable=invalid-name 'player_filter_tests': [ - 'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/0', - 'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/1', - 'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/2', - 'VideoDecoderTests/VideoDecoderTest.DecodeFullGOP/3', - 'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/0', - 'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/1', - 'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/2', - 'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/3', - 'VideoDecoderTests/VideoDecoderTest' - '.GetCurrentDecodeTargetBeforeWriteInputBuffer/0', - 'VideoDecoderTests/VideoDecoderTest' - '.GetCurrentDecodeTargetBeforeWriteInputBuffer/2', - 'VideoDecoderTests/VideoDecoderTest.HoldFramesUntilFull/0', - 'VideoDecoderTests/VideoDecoderTest.HoldFramesUntilFull/1', - 'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/0', - 'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/1', - 'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/2', - 'VideoDecoderTests/VideoDecoderTest.ResetBeforeInput/3', - 'VideoDecoderTests/VideoDecoderTest.Preroll/0', - 'VideoDecoderTests/VideoDecoderTest.Preroll/1', - 'VideoDecoderTests/VideoDecoderTest.SingleInput/0', - 'VideoDecoderTests/VideoDecoderTest.SingleInput/1', - 'VideoDecoderTests/VideoDecoderTest.SingleInput/2', - 'VideoDecoderTests/VideoDecoderTest.SingleInput/3', + # GetMaxNumberOfCachedFrames() on Android is device dependent, + # and Android doesn't provide an API to get it. So, this function + # doesn't make sense on Android. But HoldFramesUntilFull tests depend + # on this number strictly. + 'VideoDecoderTests/VideoDecoderTest.HoldFramesUntilFull/*', + + # Currently, invalid input tests are not supported. 'VideoDecoderTests/VideoDecoderTest.SingleInvalidInput/*', 'VideoDecoderTests/VideoDecoderTest' '.MultipleValidInputsAfterInvalidKeyFrame/*', @@ -305,9 +288,6 @@ # Android currently does not support multi-video playback, which # the following tests depend upon. - 'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/0', - 'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/1', - 'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/2', - 'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/3', + 'VideoDecoderTests/VideoDecoderTest.ThreeMoreDecoders/*', ], }
diff --git a/src/starboard/android/shared/launcher.py b/src/starboard/android/shared/launcher.py deleted file mode 100644 index 5a0d6bb..0000000 --- a/src/starboard/android/shared/launcher.py +++ /dev/null
@@ -1,401 +0,0 @@ -# -# Copyright 2017 The Cobalt Authors. All Rights Reserved. -# -# 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. -# -"""Android implementation of Starboard launcher abstraction.""" - -import os -import Queue -import re -import socket -import subprocess -import sys -import threading -import time - -import _env # pylint: disable=unused-import - -from starboard.android.shared import sdk_utils -from starboard.tools import abstract_launcher - -_APP_PACKAGE_NAME = 'dev.cobalt.coat' - -_APP_START_INTENT = 'dev.cobalt.coat/dev.cobalt.app.MainActivity' - -# Matches an "adb shell am monitor" error line. -_RE_ADB_AM_MONITOR_ERROR = re.compile(r'\*\* ERROR') - -# String added to queue to indicate process has crashed -_QUEUE_CODE_CRASHED = 'crashed' - -# Args to go/crow, which is started if no other device is attached. -_CROW_COMMANDLINE = ['/google/data/ro/teams/mobile_eng_prod/crow/crow.par', - '--api_level', '24', '--device', 'tv', - '--open_gl_driver', 'host', - '--noenable_g3_monitor'] - -# How long to keep logging after a crash in order to emit the stack trace. -_CRASH_LOG_SECONDS = 1.0 - -_DEV_NULL = open('/dev/null') - -_ADB = os.path.join(sdk_utils.GetSdkPath(), 'platform-tools', 'adb') - -_RUNTIME_PERMISSIONS = [ - 'android.permission.GET_ACCOUNTS', - 'android.permission.RECORD_AUDIO', -] - - -def TargetOsPathJoin(*path_elements): - """os.path.join for the target (Android).""" - return '/'.join(path_elements) - - -def CleanLine(line): - """Removes trailing carriages returns from ADB output.""" - return line.replace('\r', '') - - -class StepTimer(object): - """Class for timing how long install/run steps take.""" - - def __init__(self, step_name): - self.step_name = step_name - self.start_time = time.time() - self.end_time = None - - def Stop(self): - if self.start_time is None: - sys.stderr.write('Cannot stop timer; not started\n') - else: - self.end_time = time.time() - total_time = self.end_time - self.start_time - sys.stderr.write('Step \"{}\" took {} seconds.\n'.format( - self.step_name, total_time)) - - -class AdbCommandBuilder(object): - """Builder for 'adb' commands.""" - - def __init__(self, device_id): - self.device_id = device_id - - def Build(self, *args): - """Builds an 'adb' commandline with the given args.""" - result = [_ADB] - if self.device_id: - result.append('-s') - result.append(self.device_id) - result += list(args) - return result - - -class AdbAmMonitorWatcher(object): - """Watches an "adb shell am monitor" process to detect crashes.""" - - def __init__(self, adb_builder, done_queue): - self.adb_builder = adb_builder - self.process = subprocess.Popen( - adb_builder.Build('shell', 'am', 'monitor'), - stdout=subprocess.PIPE, - stderr=_DEV_NULL, - close_fds=True) - self.thread = threading.Thread(target=self._Run) - self.thread.start() - self.done_queue = done_queue - - def Shutdown(self): - self.process.kill() - self.thread.join() - - def _Run(self): - while True: - line = CleanLine(self.process.stdout.readline()) - if not line: - return - if re.search(_RE_ADB_AM_MONITOR_ERROR, line): - self.done_queue.put(_QUEUE_CODE_CRASHED) - # This log line will wake up the main thread - subprocess.call( - self.adb_builder.Build('shell', 'log', '-t', 'starboard', - 'am monitor detected crash'), - close_fds=True) - - -class Launcher(abstract_launcher.AbstractLauncher): - """Run an application on Android.""" - - def __init__(self, platform, target_name, config, device_id, **kwargs): - - super(Launcher, self).__init__(platform, target_name, config, device_id, - **kwargs) - - if not self.device_id: - self.device_id = self._IdentifyDevice() - else: - self._ConnectIfNecessary() - - self.adb_builder = AdbCommandBuilder(self.device_id) - - out_directory = os.path.split(self.GetTargetPath())[0] - self.apk_path = os.path.join(out_directory, '{}.apk'.format(target_name)) - if not os.path.exists(self.apk_path): - raise Exception("Can't find APK {}".format(self.apk_path)) - - # This flag is set when the main Run() loop exits. If Kill() is called - # after this flag is set, it will not do anything. - self.killed = threading.Event() - - # Keep track of the port used by ADB forward in order to remove it later - # on. - self.local_port = None - - def _IsValidIPv4Address(self, address): - """Returns True if address is a valid IPv4 address, False otherwise.""" - try: - # inet_aton throws an exception if the address is not a valid IPv4 - # address. However addresses such as '127.1' might still be considered - # valid, hence the check for 3 '.' in the address. - if socket.inet_aton(address) and address.count('.') == 3: - return True - except: - pass - return False - - def _GetAdbDevices(self): - """Returns a list of names of connected devices, or empty list if none.""" - - # Does not use the ADBCommandBuilder class because this command should be - # run without targeting a specific device. - p = subprocess.Popen([_ADB, 'devices'], stderr=_DEV_NULL, - stdout=subprocess.PIPE, close_fds=True) - result = p.stdout.readlines()[1:-1] - p.wait() - - names = [] - for device in result: - name_info = device.split('\t') - # Some devices may not have authorization for USB debugging. - try: - if 'unauthorized' not in name_info[1]: - names.append(name_info[0]) - # Sometimes happens when device is found, even though none are connected. - except IndexError: - continue - return names - - def _IdentifyDevice(self): - """Picks a device to be used to run the executable. - - In the event that no device_id is provided, but multiple - devices are connected, this method chooses the first device - listed. - - Returns: - The name of an attached device, or None if no devices are present. - """ - device_name = None - - devices = self._GetAdbDevices() - if devices: - device_name = devices[0] - - return device_name - - def _ConnectIfNecessary(self): - """Run ADB connect if needed for devices connected over IP.""" - if not self._IsValidIPv4Address(self.device_id): - return - for device in self._GetAdbDevices(): - # Devices returned by _GetAdbDevices might include port number, so cannot - # simply check if self.device_id is in the returned list. - if self.device_id in device: - return - - # Device isn't connected. Run ADB connect. - # Does not use the ADBCommandBuilder class because this command should be - # run without targeting a specific device. - p = subprocess.Popen([_ADB, 'connect', self.device_id], stderr=_DEV_NULL, - stdout=subprocess.PIPE, close_fds=True) - result = p.stdout.readlines()[0] - p.wait() - - if 'connected to' not in result: - sys.stderr.write('Failed to connect to {}\n'.format(self.device_id)) - - def _LaunchCrowIfNecessary(self): - if self.device_id: - return - - # Note that we just leave Crow running, since we uninstall/reinstall - # each time anyway. - self._CheckCall(*_CROW_COMMANDLINE) - - def _Call(self, *args): - sys.stderr.write('{}\n'.format(' '.join(args))) - subprocess.call(args, stdout=_DEV_NULL, stderr=_DEV_NULL, - close_fds=True) - - def _CallAdb(self, *in_args): - args = self.adb_builder.Build(*in_args) - self._Call(*args) - - def _CheckCall(self, *args): - sys.stderr.write('{}\n'.format(' '.join(args))) - subprocess.check_call(args, stdout=_DEV_NULL, stderr=_DEV_NULL, - close_fds=True) - - def _CheckCallAdb(self, *in_args): - args = self.adb_builder.Build(*in_args) - self._CheckCall(*args) - - def _PopenAdb(self, *args, **kwargs): - return subprocess.Popen(self.adb_builder.Build(*args), close_fds=True, - **kwargs) - - def Run(self): - # The return code for binaries run on Android is read from a log line that - # it emitted in android_main.cc. This return_code variable will be assigned - # the value read when we see that line, or left at 1 in the event of a crash - # or early exit. - return_code = 1 - - # Setup for running executable - self._LaunchCrowIfNecessary() - self._CheckCallAdb('wait-for-device') - self._Shutdown() - - # Clear logcat - self._CheckCallAdb('logcat', '-c') - - # Install the APK. - install_timer = StepTimer('install') - self._CheckCallAdb('install', '-r', self.apk_path) - install_timer.Stop() - - # Send the wakeup key to ensure daydream isn't running, otherwise Activity - # Manager may get in a loop running the test over and over again. - self._CheckCallAdb('shell', 'input', 'keyevent', 'KEYCODE_WAKEUP') - - # Grant runtime permissions to avoid prompts during testing. - for permission in _RUNTIME_PERMISSIONS: - self._CheckCallAdb('shell', 'pm', 'grant', _APP_PACKAGE_NAME, permission) - - done_queue = Queue.Queue() - am_monitor = AdbAmMonitorWatcher(self.adb_builder, done_queue) - - # Increases the size of the logcat buffer. Without this, the log buffer - # will not flush quickly enough and output will be cut off. - self._CheckCallAdb('logcat', '-G', '2M') - - # Ctrl + C will kill this process - logcat_process = self._PopenAdb( - 'logcat', '-v', 'raw', '-s', '*:F', 'DEBUG:*', 'System.err:*', - 'starboard:*', 'starboard_media:*', - stdout=subprocess.PIPE, stderr=subprocess.STDOUT) - - # Actually running executable - run_timer = StepTimer('running executable') - try: - args = ['shell', 'am', 'start'] - command_line_params = [ - '--android_log_sleep_time=1000', - '--disable_sign_in', - ] - if self.target_command_line_params: - command_line_params += self.target_command_line_params - args += ['--esa', 'args', "'{}'".format(','.join(command_line_params))] - args += [_APP_START_INTENT] - - self._CheckCallAdb(*args) - - app_crashed = False - while True: - if not done_queue.empty(): - done_queue_code = done_queue.get_nowait() - if done_queue_code == _QUEUE_CODE_CRASHED: - app_crashed = True - threading.Timer(_CRASH_LOG_SECONDS, logcat_process.kill).start() - - # Note we cannot use "for line in logcat_process.stdout" because - # that uses a large buffer which will cause us to deadlock. - line = CleanLine(logcat_process.stdout.readline()) - - # Some crashes are not caught by the am_monitor thread, but they do - # produce the following string in logcat before they exit. - if 'beginning of crash' in line: - app_crashed = True - threading.Timer(_CRASH_LOG_SECONDS, logcat_process.kill).start() - - if not line: # Logcat exited, or was killed - break - else: - self._WriteLine(line) - # Don't break until we see the below text in logcat, which should be - # written when the Starboard application event loop finishes. - if '***Application Stopped***' in line: - try: - return_code = int(line.split(' ')[-1]) - except ValueError: # Error message was printed to stdout - pass - logcat_process.kill() - break - - finally: - if app_crashed: - self._WriteLine('***Application Crashed***\n') - else: - self._Shutdown() - if self.local_port is not None: - self._CallAdb('forward', '--remove', 'tcp:{}'.format(self.local_port)) - am_monitor.Shutdown() - self.killed.set() - run_timer.Stop() - if logcat_process.poll() is None: - # This could happen when using SIGINT to kill the launcher - # (e.g. when using starboard/tools/example/app_launcher_client.py). - sys.stderr.write('Logcat process is still running. Killing it now.\n') - logcat_process.kill() - - return return_code - - def _Shutdown(self): - self._CallAdb('shell', 'am', 'force-stop', _APP_PACKAGE_NAME) - - def Kill(self): - if not self.killed.is_set(): - sys.stderr.write('***Killing Launcher***\n') - self._CheckCallAdb('shell', 'log', '-t', 'starboard', - '***Application Stopped*** 1') - self._Shutdown() - else: - sys.stderr.write('Cannot kill launcher: already dead.\n') - - def _WriteLine(self, line): - """Write log output to stdout.""" - self.output_file.write(line) - self.output_file.flush() - - def GetHostAndPortGivenPort(self, port): - forward_p = self._PopenAdb( - 'forward', 'tcp:0', 'tcp:{}'.format(port), - stdout=subprocess.PIPE, - stderr=_DEV_NULL) - forward_p.wait() - - self.local_port = CleanLine(forward_p.stdout.readline()).rstrip('\n') - sys.stderr.write('ADB forward local port {} ' - '=> device port {}\n'.format(self.local_port, port)) - return socket.gethostbyname('localhost'), self.local_port
diff --git a/src/starboard/android/shared/media_codec_bridge.cc b/src/starboard/android/shared/media_codec_bridge.cc index 8b4daa4..01ed2e3 100644 --- a/src/starboard/android/shared/media_codec_bridge.cc +++ b/src/starboard/android/shared/media_codec_bridge.cc
@@ -24,6 +24,8 @@ // https://developer.android.com/reference/android/media/MediaFormat.html#COLOR_RANGE_FULL. const jint COLOR_RANGE_FULL = 1; const jint COLOR_RANGE_LIMITED = 2; +// Not defined in MediaFormat. Represents unspecified color ID range. +const jint COLOR_RANGE_UNSPECIFIED = 0; const jint COLOR_STANDARD_BT2020 = 6; const jint COLOR_STANDARD_BT601_NTSC = 4; @@ -70,6 +72,8 @@ return COLOR_RANGE_LIMITED; case kSbMediaRangeIdFull: return COLOR_RANGE_FULL; + case kSbMediaRangeIdUnspecified: + return COLOR_RANGE_UNSPECIFIED; default: return COLOR_VALUE_UNKNOWN; } @@ -254,18 +258,6 @@ j_reused_get_output_format_result_ = NULL; } -DequeueInputResult MediaCodecBridge::DequeueInputBuffer(jlong timeout_us) { - JniEnvExt* env = JniEnvExt::Get(); - env->CallVoidMethodOrAbort( - j_media_codec_bridge_, "dequeueInputBuffer", - "(JLdev/cobalt/media/MediaCodecBridge$DequeueInputResult;)V", timeout_us, - j_reused_dequeue_input_result_); - return {env->CallIntMethodOrAbort(j_reused_dequeue_input_result_, "status", - "()I"), - env->CallIntMethodOrAbort(j_reused_dequeue_input_result_, "index", - "()I")}; -} - jobject MediaCodecBridge::GetInputBuffer(jint index) { SB_DCHECK(index >= 0); return JniEnvExt::Get()->CallObjectMethodOrAbort( @@ -318,26 +310,6 @@ presentation_time_microseconds); } -DequeueOutputResult MediaCodecBridge::DequeueOutputBuffer(jlong timeout_us) { - JniEnvExt* env = JniEnvExt::Get(); - env->CallVoidMethodOrAbort( - j_media_codec_bridge_, "dequeueOutputBuffer", - "(JLdev/cobalt/media/MediaCodecBridge$DequeueOutputResult;)V", timeout_us, - j_reused_dequeue_output_result_); - return {env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "status", - "()I"), - env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "index", - "()I"), - env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "flags", - "()I"), - env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "offset", - "()I"), - env->CallLongMethodOrAbort(j_reused_dequeue_output_result_, - "presentationTimeMicroseconds", "()J"), - env->CallIntMethodOrAbort(j_reused_dequeue_output_result_, "numBytes", - "()I")}; -} - jobject MediaCodecBridge::GetOutputBuffer(jint index) { SB_DCHECK(index >= 0); return JniEnvExt::Get()->CallObjectMethodOrAbort(
diff --git a/src/starboard/android/shared/media_decoder.cc b/src/starboard/android/shared/media_decoder.cc index c47c126..fe757cc 100644 --- a/src/starboard/android/shared/media_decoder.cc +++ b/src/starboard/android/shared/media_decoder.cc
@@ -303,7 +303,11 @@ if (is_valid()) { host_->OnFlushing(); - + // After |decoder_thread_| is ended and before |media_codec_bridge_| is + // flushed, OnMediaCodecOutputBufferAvailable() would still be called. + // So that, |dequeue_output_results_| may not be empty. As we call + // JoinOnThreads() in destructor and DequeueOutputResult is consisted of + // plain data, it's fine to let destructor delete |dequeue_output_results_|. jint status = media_codec_bridge_->Flush(); if (status != MEDIA_CODEC_OK) { SB_LOG(ERROR) << "Failed to flush media codec.";
diff --git a/src/starboard/android/shared/player_create.cc b/src/starboard/android/shared/player_create.cc index 800735b..ffa2260 100644 --- a/src/starboard/android/shared/player_create.cc +++ b/src/starboard/android/shared/player_create.cc
@@ -28,7 +28,6 @@ using starboard::android::shared::cobalt::kPlaying; using starboard::android::shared::cobalt:: UpdateActiveSessionPlatformPlaybackState; -using starboard::android::shared::cobalt::UpdateActiveSessionPlatformPlayer; SbPlayer SbPlayerCreate(SbWindow window, SbMediaVideoCodec video_codec, @@ -116,7 +115,5 @@ // matter. SbPlayerSetBounds(player, 0, 0, 0, 0, 0); - UpdateActiveSessionPlatformPlayer(player); - return player; }
diff --git a/src/starboard/android/shared/player_destroy.cc b/src/starboard/android/shared/player_destroy.cc index b1b5a96..b790729 100644 --- a/src/starboard/android/shared/player_destroy.cc +++ b/src/starboard/android/shared/player_destroy.cc
@@ -20,13 +20,11 @@ using starboard::android::shared::cobalt::kNone; using starboard::android::shared::cobalt:: UpdateActiveSessionPlatformPlaybackState; -using starboard::android::shared::cobalt::UpdateActiveSessionPlatformPlayer; void SbPlayerDestroy(SbPlayer player) { if (!SbPlayerIsValid(player)) { return; } UpdateActiveSessionPlatformPlaybackState(kNone); - UpdateActiveSessionPlatformPlayer(kSbPlayerInvalid); delete player; }
diff --git a/src/starboard/android/shared/starboard_platform.gypi b/src/starboard/android/shared/starboard_platform.gypi index 977c928..186c9df 100644 --- a/src/starboard/android/shared/starboard_platform.gypi +++ b/src/starboard/android/shared/starboard_platform.gypi
@@ -62,6 +62,9 @@ 'audio_decoder.h', 'audio_renderer.h', 'audio_sink_get_max_channels.cc', + 'audio_sink_get_min_buffer_size_in_frames.cc', + 'audio_sink_min_required_frames_tester.cc', + 'audio_sink_min_required_frames_tester.h', 'audio_sink_get_nearest_supported_sample_frequency.cc', 'audio_sink_is_audio_frame_storage_type_supported.cc', 'audio_sink_is_audio_sample_type_supported.cc', @@ -444,6 +447,7 @@ '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc', '<(DEPTH)/starboard/shared/stub/system_request_pause.cc', '<(DEPTH)/starboard/shared/stub/system_request_unpause.cc', + '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc', '<(DEPTH)/starboard/shared/stub/thread_context_get_pointer.cc', '<(DEPTH)/starboard/shared/stub/thread_sampler_create.cc', '<(DEPTH)/starboard/shared/stub/thread_sampler_destroy.cc',
diff --git a/src/starboard/android/shared/video_decoder.cc b/src/starboard/android/shared/video_decoder.cc index 4d3400a..227b54c 100644 --- a/src/starboard/android/shared/video_decoder.cc +++ b/src/starboard/android/shared/video_decoder.cc
@@ -61,9 +61,6 @@ if (!released_) { media_codec_bridge_->ReleaseOutputBuffer(dequeue_output_result_.index, false); - if (is_end_of_stream()) { - media_codec_bridge_->Flush(); - } } } @@ -166,10 +163,7 @@ output_mode_(output_mode), decode_target_graphics_context_provider_( decode_target_graphics_context_provider), - decode_target_(kSbDecodeTargetInvalid), - frame_width_(0), - frame_height_(0), - first_buffer_received_(false), + has_new_texture_available_(false), surface_condition_variable_(surface_destroy_mutex_) { if (!InitializeCodec()) { SB_LOG(ERROR) << "Failed to initialize video decoder."; @@ -245,11 +239,17 @@ SB_LOG(ERROR) << "Failed to reinitialize codec."; TeardownCodec(); error_cb_(kSbPlayerErrorDecode, "Cannot initialize codec."); + return; } } } - + // There's a race condition when suspending the app. If surface view is + // destroyed before video decoder stopped, |media_decoder_| could be null + // here. And error_cb_() could be handled asynchronously. It's possible + // that WriteInputBuffer() is called again when the first WriteInputBuffer() + // fails, in such case is_valid() will also return false. if (!is_valid()) { + SB_LOG(INFO) << "Trying to write input buffer when codec is not available."; return; } media_decoder_->WriteInputBuffer(input_buffer); @@ -262,11 +262,22 @@ SB_DCHECK(decoder_status_cb_); if (!first_buffer_received_) { + // In this case, |media_decoder_|'s decoder thread is not initialized. + // Return EOS frame directly. first_buffer_received_ = true; first_buffer_timestamp_ = 0; + decoder_status_cb_(kBufferFull, VideoFrame::CreateEOSFrame()); + return; } + // There's a race condition when suspending the app. If surface view is + // destroyed before video decoder stopped, |media_decoder_| could be null + // here. And error_cb_() could be handled asynchronously. It's possible + // that WriteEndOfStream() is called immediately after the first + // WriteInputBuffer() fails, in such case is_valid() will also return false. if (!is_valid()) { + SB_LOG(INFO) + << "Trying to write end of stream when codec is not available."; return; } media_decoder_->WriteEndOfStream(); @@ -306,6 +317,10 @@ } j_output_surface = decode_target->data->surface; + JniEnvExt* env = JniEnvExt::Get(); + env->CallVoidMethodOrAbort(decode_target->data->surface_texture, + "setOnFrameAvailableListener", "(J)V", this); + starboard::ScopedLock lock(decode_target_mutex_); decode_target_ = decode_target; } break; @@ -349,11 +364,34 @@ media_decoder_.reset(); color_metadata_ = starboard::nullopt; - starboard::ScopedLock lock(decode_target_mutex_); - if (SbDecodeTargetIsValid(decode_target_)) { + SbDecodeTarget decode_target_to_release = kSbDecodeTargetInvalid; + { + starboard::ScopedLock lock(decode_target_mutex_); + if (SbDecodeTargetIsValid(decode_target_)) { + // Remove OnFrameAvailableListener to make sure the callback + // would not be called. + JniEnvExt* env = JniEnvExt::Get(); + env->CallVoidMethodOrAbort(decode_target_->data->surface_texture, + "removeOnFrameAvailableListener", "()V"); + + decode_target_to_release = decode_target_; + decode_target_ = kSbDecodeTargetInvalid; + first_texture_received_ = false; + has_new_texture_available_.store(false); + } else { + // If |decode_target_| is not created, |first_texture_received_| and + // |has_new_texture_available_| should always be false. + SB_DCHECK(!first_texture_received_); + SB_DCHECK(!has_new_texture_available_.load()); + } + } + // Release SbDecodeTarget on renderer thread. As |decode_target_mutex_| may + // be required in renderer thread, SbDecodeTargetReleaseInGlesContext() must + // be called when |decode_target_mutex_| is not locked, or we may get + // deadlock. + if (SbDecodeTargetIsValid(decode_target_to_release)) { SbDecodeTargetReleaseInGlesContext(decode_target_graphics_context_provider_, - decode_target_); - decode_target_ = kSbDecodeTargetInvalid; + decode_target_to_release); } } @@ -481,32 +519,43 @@ // We must take a lock here since this function can be called from a separate // thread. starboard::ScopedLock lock(decode_target_mutex_); - if (SbDecodeTargetIsValid(decode_target_)) { - updateTexImage(decode_target_->data->surface_texture); + bool has_new_texture = has_new_texture_available_.exchange(false); + if (has_new_texture) { + updateTexImage(decode_target_->data->surface_texture); - float matrix4x4[16]; - getTransformMatrix(decode_target_->data->surface_texture, matrix4x4); - SetDecodeTargetContentRegionFromMatrix( - &decode_target_->data->info.planes[0].content_region, 1, 1, matrix4x4); + float matrix4x4[16]; + getTransformMatrix(decode_target_->data->surface_texture, matrix4x4); + SetDecodeTargetContentRegionFromMatrix( + &decode_target_->data->info.planes[0].content_region, 1, 1, + matrix4x4); - // Mark the decode target's width and height as 1, so that the - // |content_region|'s coordinates will be interpreted as normalized - // coordinates. This is nice because on Android we're never explicitly - // told the texture width/height, and we are only provided the content - // region via normalized coordinates. - decode_target_->data->info.planes[0].width = 1; - decode_target_->data->info.planes[0].height = 1; - decode_target_->data->info.width = 1; - decode_target_->data->info.height = 1; + // Mark the decode target's width and height as 1, so that the + // |content_region|'s coordinates will be interpreted as normalized + // coordinates. This is nice because on Android we're never explicitly + // told the texture width/height, and we are only provided the content + // region via normalized coordinates. + decode_target_->data->info.planes[0].width = 1; + decode_target_->data->info.planes[0].height = 1; + decode_target_->data->info.width = 1; + decode_target_->data->info.height = 1; - SbDecodeTarget out_decode_target = new SbDecodeTargetPrivate; - out_decode_target->data = decode_target_->data; + if (!first_texture_received_) { + first_texture_received_ = true; + } + } - return out_decode_target; - } else { - return kSbDecodeTargetInvalid; + if (first_texture_received_) { + SbDecodeTarget out_decode_target = new SbDecodeTargetPrivate; + out_decode_target->data = decode_target_->data; + return out_decode_target; + } } + return kSbDecodeTargetInvalid; +} + +void VideoDecoder::OnNewTextureAvailable() { + has_new_texture_available_.store(true); } void VideoDecoder::OnSurfaceDestroyed() { @@ -527,3 +576,16 @@ } // namespace shared } // namespace android } // namespace starboard + +extern "C" SB_EXPORT_PLATFORM void +Java_dev_cobalt_media_VideoSurfaceTexture_nativeOnFrameAvailable( + JNIEnv* env, + jobject unused_this, + jlong native_video_decoder) { + using starboard::android::shared::VideoDecoder; + + VideoDecoder* video_decoder = + reinterpret_cast<VideoDecoder*>(native_video_decoder); + SB_DCHECK(video_decoder); + video_decoder->OnNewTextureAvailable(); +}
diff --git a/src/starboard/android/shared/video_decoder.h b/src/starboard/android/shared/video_decoder.h index ef5964c..18f3730 100644 --- a/src/starboard/android/shared/video_decoder.h +++ b/src/starboard/android/shared/video_decoder.h
@@ -62,6 +62,11 @@ const ErrorCB& error_cb) override; size_t GetPrerollFrameCount() const override; SbTime GetPrerollTimeout() const override; + // As we hold output buffers received from MediaCodec, the max number of + // cached frames depends on the max number of output buffers in MediaCodec, + // which is device dependent. The media decoder may stall if we hold all + // output buffers. But it would continue working once we release output + // buffer. size_t GetMaxNumberOfCachedFrames() const override { return 12; } void WriteInputBuffer(const scoped_refptr<InputBuffer>& input_buffer) @@ -72,6 +77,8 @@ bool is_valid() const { return media_decoder_ != NULL; } + void OnNewTextureAvailable(); + private: // Attempt to initialize the codec. Returns whether initialization was // successful. @@ -100,7 +107,7 @@ // If decode-to-texture is enabled, then we store the decode target texture // inside of this |decode_target_| member. - SbDecodeTarget decode_target_; + SbDecodeTarget decode_target_ = kSbDecodeTargetInvalid; // Since GetCurrentDecodeTarget() needs to be called from an arbitrary thread // to obtain the current decode target (which ultimately ends up being a @@ -109,8 +116,8 @@ starboard::Mutex decode_target_mutex_; // The width and height of the latest decoded frame. - int32_t frame_width_; - int32_t frame_height_; + int32_t frame_width_ = 0; + int32_t frame_height_ = 0; // The last enqueued |SbMediaColorMetadata|. optional<SbMediaColorMetadata> color_metadata_; @@ -120,8 +127,10 @@ atomic_int32_t number_of_frames_being_decoded_; scoped_refptr<Sink> sink_; - bool first_buffer_received_; + bool first_buffer_received_ = false; + bool first_texture_received_ = false; volatile SbTime first_buffer_timestamp_; + atomic_bool has_new_texture_available_; // Use |owns_video_surface_| only on decoder thread, to avoid unnecessary // invocation of ReleaseVideoSurface(), though ReleaseVideoSurface() would
diff --git a/src/starboard/audio_sink.h b/src/starboard/audio_sink.h index cab09dc..c0655b8 100644 --- a/src/starboard/audio_sink.h +++ b/src/starboard/audio_sink.h
@@ -170,6 +170,25 @@ SB_EXPORT bool SbAudioSinkIsAudioFrameStorageTypeSupported( SbMediaAudioFrameStorageType audio_frame_storage_type); +#if SB_API_VERSION >= 11 +// Returns the minimum frames required by audio sink to play without underflows. +// Returns -1, if |channels|, |sample_type| or |sampling_frequency_hz| is not +// supported. It's user's responsibility to ensure that there're enough +// frames written into audio sink during playing, or it may have underflows. +// +// |channels|: The number of audio channels, such as left and right channels +// in stereo audio. +// |audio_sample_type|: The type of each sample of the audio data -- +// |int16|, |float32|, etc. +// |sampling_frequency_hz|: The sample frequency of the audio data being +// streamed. For example, 22,000 Hz means 22,000 sample elements represents +// one second of audio data. +SB_EXPORT int SbAudioSinkGetMinBufferSizeInFrames( + int channels, + SbMediaAudioSampleType sample_type, + int sampling_frequency_hz); +#endif // SB_API_VERSION >= 11 + #ifdef __cplusplus } // extern "C" #endif
diff --git a/src/starboard/build/filelist.py b/src/starboard/build/filelist.py index c2ec006..c42f2f9 100644 --- a/src/starboard/build/filelist.py +++ b/src/starboard/build/filelist.py
@@ -34,8 +34,8 @@ """Makes it easy to include files for things like archive operations.""" def __init__(self): - self.file_list = [] # List of 2-tuples: file_path, archive_path - self.symlink_dir_list = [] # Same + self.file_list = [] # List of (file_path, archive_path) + self.symlink_dir_list = [] # List of (file_path, link_path, target_path) def AddAllFilesInPath(self, root_dir, sub_path): """Starting at the root path, the sub_paths are searched for files.""" @@ -45,12 +45,16 @@ self.AddFile(root_dir, sub_path) elif not os.path.isdir(sub_path): raise IOError('Expected root directory to exist: %s' % sub_path) + cwd = os.getcwd() for root, dirs, files in port_symlink.OsWalk(sub_path): + # Do not use os.path.abspath as it does not work on Win for long paths. + if not os.path.isabs(root): + root = os.path.join(cwd, root) for f in files: - full_path = os.path.abspath(os.path.join(root, f)) + full_path = os.path.join(root, f) all_files.append(full_path) for dir_name in dirs: - full_path = os.path.abspath(os.path.join(root, dir_name)) + full_path = os.path.join(root, dir_name) if port_symlink.IsSymLink(full_path): all_symlinks.append(full_path) for f in all_files + all_symlinks: @@ -84,11 +88,19 @@ def _ResolveSymLink(link_file): + """Returns the absolute path of the resolved link. This path should exist.""" target_path = port_symlink.ReadSymLink(link_file) - if os.path.exists(target_path): # Absolute path + if os.path.isabs(target_path): # Absolute path + assert os.path.exists(target_path), ( + 'Path {} does not exist.'.format(target_path)) return target_path - else: - return os.path.join(link_file, target_path) # Relative path from link_file. + else: # Relative path from link_file. + abs_path = os.path.normpath( + os.path.join(os.path.dirname(link_file), target_path)) + assert os.path.exists(abs_path), ( + 'Path {} does not exist (link file: {}, target_path: {})'.format( + abs_path, link_file, target_path)) + return abs_path def _FallbackOsGetRelPath(path, start_dir): @@ -103,24 +115,26 @@ def _OsGetRelpath(path, start_dir): + path = os.path.normpath(path) + start_dir = os.path.normpath(start_dir) + # Use absolute paths for Windows (nt paths checks the drive specifier). + # Do not use os.path.abspath as it does not work on Win for long paths. + if not os.path.isabs(path): + path = os.path.join(os.getcwd(), path) + if not os.path.isabs(start_dir): + start_dir = os.path.join(os.getcwd(), start_dir) try: return os.path.relpath(path, start_dir) except ValueError: try: - # Windows: nt paths checks the drive specifier, which is given by the - # abspath operation. - return os.path.relpath(os.path.abspath(path), os.path.abspath(start_dir)) - except ValueError: - try: - # Last resort: do a string comparison to get relative path. - # Fixes issue b/134589032 - rel_path = _FallbackOsGetRelPath(path, start_dir) - if not os.path.exists(os.path.join(start_dir, rel_path)): - raise ValueError('% does not exist.' % os.path.abspath(rel_path)) - return rel_path - except ValueError as err: - logging.exception('Error %s while calling os.path.relpath(%s, %s)', - err, path, start_dir) + # Do a string comparison to get relative path. + rel_path = _FallbackOsGetRelPath(path, start_dir) + if not os.path.exists(os.path.join(start_dir, rel_path)): + raise ValueError('%s does not exist.' % os.path.abspath(rel_path)) + return rel_path + except ValueError as err: + logging.exception('Error %s while calling os.path.relpath(%s, %s)', + err, path, start_dir) TYPE_NONE = 'NONE'
diff --git a/src/starboard/build/filelist_test.py b/src/starboard/build/filelist_test.py index 7463ebb..34fc71b 100644 --- a/src/starboard/build/filelist_test.py +++ b/src/starboard/build/filelist_test.py
@@ -21,18 +21,32 @@ import _env # pylint: disable=relative-import,unused-import +from cobalt.build import cobalt_archive_extract from starboard.build import filelist from starboard.build import port_symlink from starboard.tools import util +LONG_DIR_NAME_1 = 'really_l' + 'o' * 120 + 'ng_dir_name' +LONG_DIR_NAME_2 = 'another_really_l' + 'o' * 120 + 'ng_dir_name' +LONG_SUB_DIRS = os.path.join(LONG_DIR_NAME_1, LONG_DIR_NAME_2) + + def _MakeDirs(path): if not os.path.isdir(path): os.makedirs(path) class TempFileSystem(object): - """Generates a test file structure with file/dir/symlink for testing.""" + """Generates a test file structure with file/dir/symlink for testing. + + <temp_dir> + |-> <root_sub_dir> + | |-> in + | | |-> from_dir + | | | |-> test.txt + | | |-> from_dir_lnk -> <temp_dir>/<root_sub_dir>/in/from_dir + """ def __init__(self, root_sub_dir='bundler'): root_sub_dir = os.path.normpath(root_sub_dir) @@ -40,9 +54,9 @@ if os.path.exists(self.root_tmp): port_symlink.Rmtree(self.root_tmp) self.root_in_tmp = os.path.join(self.root_tmp, 'in') - self.test_txt = os.path.join(self.root_in_tmp, 'from_dir', 'test.txt') self.sym_dir = os.path.join(self.root_in_tmp, 'from_dir_lnk') self.from_dir = os.path.join(self.root_in_tmp, 'from_dir') + self.test_txt = os.path.join(self.from_dir, 'test.txt') def Make(self): _MakeDirs(self.root_in_tmp) @@ -51,6 +65,15 @@ with open(self.test_txt, 'w') as fd: fd.write('TEST') + def MakeLongPathFile(self): + long_path_txt = os.path.join(self.from_dir, LONG_SUB_DIRS, 'test2.txt') + self.long_path_txt = long_path_txt + if port_symlink.IsWindows(): + long_path_txt = cobalt_archive_extract.ToWinUncPath(long_path_txt) + _MakeDirs(os.path.dirname(long_path_txt)) + with open(long_path_txt, 'w') as fd: + fd.write('TEST BIS') + def Clear(self): port_symlink.Rmtree(self.root_tmp) @@ -99,10 +122,15 @@ def testAddAllFilesInPath(self): tf = TempFileSystem() tf.Make() + tf.MakeLongPathFile() flist = filelist.FileList() flist.AddAllFilesInPath(tf.root_in_tmp, tf.root_in_tmp) self.assertTrue(flist.symlink_dir_list) - self.assertTrue(flist.file_list) + expected_file_list = [ + [tf.test_txt, os.path.join('from_dir', 'test.txt')], + [tf.long_path_txt, + os.path.join('from_dir', LONG_SUB_DIRS , 'test2.txt')]] + self.assertEqual(flist.file_list, expected_file_list) def testAddSymlink(self): tf = TempFileSystem() @@ -114,27 +142,30 @@ self.assertFalse(flist.file_list) def testAddRelativeSymlink(self): - """Tests the that adding a relative symlink works as expected.""" + """Tests that adding a relative symlink works as expected.""" tf = TempFileSystem() tf.Make() flist = filelist.FileList() - in2 = os.path.join(tf.root_in_tmp, 'in2') - target_path = os.path.relpath(tf.from_dir, in2) + in2 = os.path.join(tf.root_in_tmp, 'subdir', 'in2') + target_path = os.path.relpath(tf.from_dir, os.path.dirname(in2)) # Sanity check that target_path is relative. - self.assertIn('..', target_path) + self.assertEqual(target_path, os.path.join('..', 'from_dir')) + # Create the link and check that it points to the correct folder. port_symlink.MakeSymLink(target_path, in2) self.assertTrue(port_symlink.IsSymLink(in2)) - read_back_target_path = port_symlink.ReadSymLink(in2) - self.assertIn('..', read_back_target_path) + self.assertEqual(port_symlink.ReadSymLink(in2), target_path) + self.assertEqual(os.listdir(in2), ['test.txt']) + # Add the symlink to flist and check its content. flist.AddFile(tf.root_tmp, in2) flist.Print() self.assertTrue(flist.symlink_dir_list) - symlink_entry = flist.symlink_dir_list[0][1:] - expected = [os.path.join('in', 'in2'), os.path.join('in', 'from_dir')] - self.assertEqual(expected, symlink_entry) + expected = [ + tf.root_tmp, + os.path.join('in', 'subdir', 'in2'), + os.path.join('in', 'from_dir')] + self.assertEqual(flist.symlink_dir_list[0], expected) def testOsGetRelpathFallback(self): - # Tests issue b/134589032 path = ( 'src/out/tmp/cobalt_archive/archive/____app_launcher/third_party/' 'web_platform_tests/custom-elements/registering-custom-elements/'
diff --git a/src/starboard/build/platform_configuration.py b/src/starboard/build/platform_configuration.py index 6ef6650..61ce79a 100644 --- a/src/starboard/build/platform_configuration.py +++ b/src/starboard/build/platform_configuration.py
@@ -106,7 +106,7 @@ Args: application_name: The name of the application to load, in a canonical - filesystem-friendly form. + filesystem-friendly form. Returns: An instance of ApplicationConfiguration defined for the application being @@ -143,7 +143,9 @@ return self._application_configuration def SetupPlatformTools(self, build_number): - """Install tools, SDKs, etc. needed to build for the platform. + """Install tools, SDKs, etc. + + needed to build for the platform. Installs tools needed to build for this platform, possibly downloading and/or interacting with the user to do so. Raises a RuntimeError if the @@ -232,7 +234,7 @@ # Which JavaScript engine to use. Currently, both SpiderMonkey 45 and # V8 are supported. Note that V8 can only be used on platforms that # support JIT. - 'javascript_engine': 'mozjs-45', + 'javascript_engine': 'v8', # Disable JIT and run in interpreter-only mode by default. It can be # set to 1 to run in JIT mode. For SpiderMonkey in particular, we @@ -240,7 +242,7 @@ # execution and lower memory usage. Setting this to 0 for engine that # requires JIT, or 1 on a platform that does not support JIT, is a # usage error. - 'cobalt_enable_jit': 0, + 'cobalt_enable_jit': 1, # TODO: Remove these compatibility variables. 'cobalt_config': config_name,
diff --git a/src/starboard/build/port_symlink.py b/src/starboard/build/port_symlink.py index 33c417b..ec9f46c 100644 --- a/src/starboard/build/port_symlink.py +++ b/src/starboard/build/port_symlink.py
@@ -104,7 +104,7 @@ def _ReadSymLink(link_path): - """Returns a absolute path to the folder referred to by the link_path.""" + """Returns the path (abs. or rel.) to the folder referred to by link_path.""" if IsWindows(): # pylint: disable=g-import-not-at-top from starboard.build import win_symlink
diff --git a/src/starboard/build/win_symlink.py b/src/starboard/build/win_symlink.py index ef9ac07..1992561 100644 --- a/src/starboard/build/win_symlink.py +++ b/src/starboard/build/win_symlink.py
@@ -31,6 +31,8 @@ import subprocess import time +from cobalt.build import cobalt_archive_extract + ################################################################################ # API # @@ -278,15 +280,20 @@ def _OsWalk(top, topdown, onerror, followlinks): """See api version of OsWalk above, for docstring.""" + # Need an absolute path to use listdir and isdir with long paths. + top_abs_path = top + if not os.path.isabs(top_abs_path): + top_abs_path = os.path.join(os.getcwd(), top_abs_path) + top_abs_path = cobalt_archive_extract.ToWinUncPath(top) try: - names = os.listdir(top) + names = os.listdir(top_abs_path) except OSError as err: if onerror is not None: onerror(err) return dirs, nondirs = [], [] for name in names: - if os.path.isdir(os.path.join(top, name)): + if os.path.isdir(os.path.join(top_abs_path, name)): dirs.append(name) else: nondirs.append(name)
diff --git a/src/starboard/build/win_symlink_fast.py b/src/starboard/build/win_symlink_fast.py index e5c33af..7e8942f 100644 --- a/src/starboard/build/win_symlink_fast.py +++ b/src/starboard/build/win_symlink_fast.py
@@ -119,7 +119,9 @@ IO_REPARSE_TAG_SYMLINK = 0xA000000C MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 0x4000 SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 +# Developer Mode must be enabled in order to use the following flag. SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE = 0x2 +SYMLINK_FLAG_RELATIVE = 0x1 class GenericReparseBuffer(ctypes.Structure): @@ -143,6 +145,16 @@ offset = type(self).PathBuffer.offset + self.PrintNameOffset return arrayt.from_address(ctypes.addressof(self) + offset).value + @property + def substitute_name(self): + arrayt = WCHAR * (self.SubstituteNameLength // 2) + offset = type(self).PathBuffer.offset + self.SubstituteNameOffset + return arrayt.from_address(ctypes.addressof(self) + offset).value + + @property + def is_relative_path(self): + return bool(self.Flags & SYMLINK_FLAG_RELATIVE) + class MountPointReparseBuffer(ctypes.Structure): """Win32 api data structure.""" @@ -158,6 +170,12 @@ offset = type(self).PathBuffer.offset + self.PrintNameOffset return arrayt.from_address(ctypes.addressof(self) + offset).value + @property + def substitute_name(self): + arrayt = WCHAR * (self.SubstituteNameLength // 2) + offset = type(self).PathBuffer.offset + self.SubstituteNameOffset + return arrayt.from_address(ctypes.addressof(self) + offset).value + class ReparseDataBuffer(ctypes.Structure): """Win32 api data structure."""
diff --git a/src/starboard/common/log.h b/src/starboard/common/log.h index bc8caf1..c7e34e5 100644 --- a/src/starboard/common/log.h +++ b/src/starboard/common/log.h
@@ -123,9 +123,19 @@ #define SB_LAZY_STREAM(stream, condition) \ !(condition) ? (void)0 : ::starboard::logging::LogMessageVoidify() & (stream) +#if SB_LOGGING_IS_OFFICIAL_BUILD +#define SB_LOG_IS_ON(severity) \ + (::starboard::logging::SB_LOG_##severity >= \ + ::starboard::logging::SB_LOG_FATAL) \ + ? ((::starboard::logging::SB_LOG_##severity) >= \ + ::starboard::logging::GetMinLogLevel()) \ + : false +#else // SB_LOGGING_IS_OFFICIAL_BUILD #define SB_LOG_IS_ON(severity) \ ((::starboard::logging::SB_LOG_##severity) >= \ - ::starboard::logging::GetMinLogLevel()) + ::starboard::logging::GetMinLogLevel()) +#endif // SB_LOGGING_IS_OFFICIAL_BUILD + #define SB_LOG_IF(severity, condition) \ SB_LAZY_STREAM(SB_LOG_STREAM(severity), SB_LOG_IS_ON(severity) && (condition)) #define SB_LOG(severity) SB_LOG_IF(severity, true)
diff --git a/src/starboard/common/rwlock.cc b/src/starboard/common/rwlock.cc index 0a9c867..3e54d03 100644 --- a/src/starboard/common/rwlock.cc +++ b/src/starboard/common/rwlock.cc
@@ -14,50 +14,61 @@ #include "starboard/common/rwlock.h" +#include "starboard/common/log.h" + namespace starboard { -RWLock::RWLock() : num_readers_(0), reader_(), writer_(1) {} +// Write-preferring lock. +// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock +RWLock::RWLock() + : readers_(0), + writing_(false) { + SB_CHECK(SbMutexCreate(&mutex_)); + SB_CHECK(SbConditionVariableCreate(&condition_, &mutex_)); +} -RWLock::~RWLock() {} +RWLock::~RWLock() { + SbConditionVariableDestroy(&condition_); + SbMutexDestroy(&mutex_); +} void RWLock::AcquireReadLock() { - reader_.Acquire(); - if (0 == num_readers_++) { - AcquireWriteLock(); + SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired); + while (writing_) { + SB_CHECK(SbConditionVariableWait(&condition_, &mutex_) != + kSbConditionVariableFailed); } - reader_.Release(); + ++readers_; + SB_CHECK(SbMutexRelease(&mutex_)); } void RWLock::ReleaseReadLock() { - reader_.Acquire(); - if (--num_readers_ == 0) { - ReleaseWriteLock(); + SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired); + if (--readers_ == 0) { + SB_CHECK(SbConditionVariableBroadcast(&condition_)); } - reader_.Release(); + SB_CHECK(SbMutexRelease(&mutex_)); } void RWLock::AcquireWriteLock() { - writer_.Take(); + SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired); + while (writing_) { + SB_CHECK(SbConditionVariableWait(&condition_, &mutex_) != + kSbConditionVariableFailed); + } + writing_ = true; + while (readers_ > 0) { + SB_CHECK(SbConditionVariableWait(&condition_, &mutex_) != + kSbConditionVariableFailed); + } + SB_CHECK(SbMutexRelease(&mutex_)); } void RWLock::ReleaseWriteLock() { - writer_.Put(); -} - -ScopedReadLock::ScopedReadLock(RWLock* rw_lock) : rw_lock_(rw_lock) { - rw_lock_->AcquireReadLock(); -} - -ScopedReadLock::~ScopedReadLock() { - rw_lock_->ReleaseReadLock(); -} - -ScopedWriteLock::ScopedWriteLock(RWLock* rw_lock) : rw_lock_(rw_lock) { - rw_lock_->AcquireWriteLock(); -} - -ScopedWriteLock::~ScopedWriteLock() { - rw_lock_->ReleaseWriteLock(); + SB_CHECK(SbMutexAcquire(&mutex_) == kSbMutexAcquired); + writing_ = false; + SB_CHECK(SbConditionVariableBroadcast(&condition_)); + SB_CHECK(SbMutexRelease(&mutex_)); } } // namespace starboard
diff --git a/src/starboard/common/rwlock.h b/src/starboard/common/rwlock.h index 245a4d8..2ec8d05 100644 --- a/src/starboard/common/rwlock.h +++ b/src/starboard/common/rwlock.h
@@ -20,8 +20,8 @@ #ifndef STARBOARD_COMMON_RWLOCK_H_ #define STARBOARD_COMMON_RWLOCK_H_ -#include "starboard/common/mutex.h" -#include "starboard/common/semaphore.h" +#include "starboard/condition_variable.h" +#include "starboard/mutex.h" namespace starboard { @@ -33,8 +33,7 @@ // This RWLock is non-upgradeable, if the read lock is held then it must // be released before the write lock can be used. // -// This implementation favors readers over writers. This implementation was -// first described by Michel Raynal. +// This implementation favors writers over readers. // // Example: // std::map<...> my_map = ...; @@ -43,15 +42,14 @@ // // bool Exists() { // This function is concurrent. // rw_lock.AcquireReadLock(); -// bool found = my_map.find(...); +// bool found = my_map.find(...) != my_map.end(); // rw_lock.ReleaseReadLock(); // return found; // } -// bool Add(...) { // Write operations are exclusive. +// void Add(...) { // Write operations are exclusive. // rw_lock.AcquireWriteLock(); -// bool erased = my_map.erase(...); +// my_map.insert(...); // rw_lock.ReleaseWriteLock(); -// return erased; // } class RWLock { public: @@ -65,18 +63,20 @@ void ReleaseWriteLock(); private: - Mutex reader_; - // Semaphore is necessary because of shared ownership: a different - // thread can unlock a writer than the one that locks it. - Semaphore writer_; - int num_readers_; + SbMutex mutex_; + SbConditionVariable condition_; + int32_t readers_; + bool writing_; + SB_DISALLOW_COPY_AND_ASSIGN(RWLock); }; class ScopedReadLock { public: - explicit ScopedReadLock(RWLock* rw_lock); - ~ScopedReadLock(); + explicit ScopedReadLock(RWLock* rw_lock) : rw_lock_(rw_lock) { + rw_lock_->AcquireReadLock(); + } + ~ScopedReadLock() { rw_lock_->ReleaseReadLock(); } private: RWLock* rw_lock_; @@ -85,8 +85,10 @@ class ScopedWriteLock { public: - explicit ScopedWriteLock(RWLock* rw_lock); - ~ScopedWriteLock(); + explicit ScopedWriteLock(RWLock* rw_lock) : rw_lock_(rw_lock) { + rw_lock_->AcquireWriteLock(); + } + ~ScopedWriteLock() { rw_lock_->ReleaseWriteLock(); } private: RWLock* rw_lock_;
diff --git a/src/starboard/configuration.h b/src/starboard/configuration.h index 4e16a26..e06b52e 100644 --- a/src/starboard/configuration.h +++ b/src/starboard/configuration.h
@@ -567,24 +567,6 @@ #error "SB_MEDIA_GPU_BUFFER_BUDGET is deprecated." #endif // defined(SB_MEDIA_GPU_BUFFER_BUDGET) -#if defined(SB_HAS_DRM_KEY_STATUSES) -#if !SB_HAS(DRM_KEY_STATUSES) -#error "SB_HAS_DRM_KEY_STATUSES is required for Starboard 6 or later." -#endif // !SB_HAS(DRM_KEY_STATUSES) -#else // defined(SB_HAS_DRM_KEY_STATUSES) -#define SB_HAS_DRM_KEY_STATUSES 1 -#endif // defined(SB_HAS_DRM_KEY_STATUSES) - -#if defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER) -#if !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) -#error \ - "SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER is required for Starboard 6 " \ - "or later." -#endif // !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) -#else // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER) -#define SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER 1 -#endif // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER) - #if SB_API_VERSION >= 11 #if defined(SB_HAS_MEDIA_IS_VIDEO_SUPPORTED_REFINEMENT) #if !SB_HAS(MEDIA_IS_VIDEO_SUPPORTED_REFINEMENT) @@ -704,4 +686,28 @@ #endif #endif +// Deprecated feature macros +// These feature macros are deprecated in Starboard version 6 and later, and are +// no longer referenced by application code. They will be removed in a future +// version. Any Starboard implementation that supports Starboard version 6 or +// later should be modified to no longer depend on these macros, with the +// assumption that their values are always 1. +#if defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER) +#if !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) +#error \ + "SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER is required for Starboard 6 " \ + "or later." +#endif // !SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) +#else // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER) +#define SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER 1 +#endif // defined(SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER) + +#if defined(SB_HAS_DRM_KEY_STATUSES) +#if !SB_HAS(DRM_KEY_STATUSES) +#error "SB_HAS_DRM_KEY_STATUSES is required for Starboard 6 or later." +#endif // !SB_HAS(DRM_KEY_STATUSES) +#else // defined(SB_HAS_DRM_KEY_STATUSES) +#define SB_HAS_DRM_KEY_STATUSES 1 +#endif // defined(SB_HAS_DRM_KEY_STATUSES) + #endif // STARBOARD_CONFIGURATION_H_
diff --git a/src/starboard/contrib/creator/shared/starboard_platform.gypi b/src/starboard/contrib/creator/shared/starboard_platform.gypi index 4a5e4f8..e33ae3d 100644 --- a/src/starboard/contrib/creator/shared/starboard_platform.gypi +++ b/src/starboard/contrib/creator/shared/starboard_platform.gypi
@@ -316,6 +316,7 @@ '<(DEPTH)/starboard/shared/stub/system_get_used_gpu_memory.cc', '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc', '<(DEPTH)/starboard/shared/stub/system_raise_platform_error.cc', + '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc', '<(DEPTH)/starboard/shared/stub/ui_nav_get_interface.cc', '<(DEPTH)/starboard/shared/stub/window_get_diagonal_size_in_inches.cc', ],
diff --git a/src/starboard/drm.h b/src/starboard/drm.h index 143cd94..35bdf7e 100644 --- a/src/starboard/drm.h +++ b/src/starboard/drm.h
@@ -76,14 +76,12 @@ int32_t encrypted_byte_count; } SbDrmSubSampleMapping; -#if SB_HAS(DRM_KEY_STATUSES) typedef struct SbDrmKeyId { // The ID of the license (or key) required to decrypt this sample. For // PlayReady, this is the license GUID in packed little-endian binary form. uint8_t identifier[16]; int identifier_size; } SbDrmKeyId; -#endif // SB_HAS(DRM_KEY_STATUSES) // All the optional information needed per sample for encrypted samples. typedef struct SbDrmSampleInfo { @@ -187,7 +185,6 @@ // A callback for notifications that the status of one or more keys in a session // has been changed. All keys of the session and their new status will be // passed along. Any keys not in the list is considered as deleted. -#if SB_HAS(DRM_KEY_STATUSES) typedef void (*SbDrmSessionKeyStatusesChangedFunc)( SbDrmSystem drm_system, void* context, @@ -196,7 +193,6 @@ int number_of_keys, const SbDrmKeyId* key_ids, const SbDrmKeyStatus* key_statuses); -#endif // SB_HAS(DRM_KEY_STATUSES) // A callback for signalling that a session has been closed by the SbDrmSystem #if SB_HAS(DRM_SESSION_CLOSED) @@ -284,11 +280,6 @@ #elif SB_HAS(DRM_SESSION_CLOSED) -#if !SB_HAS(DRM_KEY_STATUSES) -#error "Platforms with SB_HAS_DRM_SESSION_CLOSED must also set " - "SB_HAS_DRM_KEY_STATUSES" -#endif // !SB_HAS(DRM_KEY_STATUSES) - SB_EXPORT SbDrmSystem SbDrmCreateSystem( const char* key_system, void* context, @@ -297,7 +288,7 @@ SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback, SbDrmSessionClosedFunc session_closed_callback); -#elif SB_HAS(DRM_KEY_STATUSES) +#else // SB_HAS(DRM_SESSION_CLOSED) SB_EXPORT SbDrmSystem SbDrmCreateSystem( const char* key_system, @@ -306,15 +297,7 @@ SbDrmSessionUpdatedFunc session_updated_callback, SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback); -#else // SB_HAS(DRM_KEY_STATUSES) - -SB_EXPORT SbDrmSystem -SbDrmCreateSystem(const char* key_system, - void* context, - SbDrmSessionUpdateRequestFunc update_request_callback, - SbDrmSessionUpdatedFunc session_updated_callback); - -#endif // SB_HAS(DRM_KEY_STATUSES) +#endif // SB_HAS(DRM_SESSION_CLOSED) // Asynchronously generates a session update request payload for // |initialization_data|, of |initialization_data_size|, in case sensitive
diff --git a/src/starboard/elf_loader/elf_loader_impl.cc b/src/starboard/elf_loader/elf_loader_impl.cc index f81db05..733da88 100644 --- a/src/starboard/elf_loader/elf_loader_impl.cc +++ b/src/starboard/elf_loader/elf_loader_impl.cc
@@ -22,7 +22,12 @@ namespace starboard { namespace elf_loader { -ElfLoaderImpl::ElfLoaderImpl() {} +ElfLoaderImpl::ElfLoaderImpl() { +#if SB_API_VERSION < 12 || !SB_HAS(MMAP) || !SB_CAN(MAP_EXECUTABLE_MEMORY) + SB_CHECK(false) << "The elf_loader requires SB_API_VERSION >= 12 with " + "executable memory map support!"; +#endif +} bool ElfLoaderImpl::Load(const char* name) { SB_LOG(INFO) << "Loading: " << name; @@ -103,11 +108,15 @@ if (relocations_->HasTextRelocations()) { // Restores the memory protection to its original state. +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) if (program_table_->AdjustMemoryProtectionOfReadOnlySegments( kSbMemoryMapProtectReserved) < 0) { SB_LOG(ERROR) << "Unable to restore segment protection"; return false; } +#else + SB_CHECK(false); +#endif } SB_LOG(INFO) << "Applied relocations";
diff --git a/src/starboard/elf_loader/exported_symbols.cc b/src/starboard/elf_loader/exported_symbols.cc index a4c4539..ea440bf 100644 --- a/src/starboard/elf_loader/exported_symbols.cc +++ b/src/starboard/elf_loader/exported_symbols.cc
@@ -14,19 +14,6 @@ #include "starboard/elf_loader/exported_symbols.h" -// TODO: Remove these once the API leaks are fixed. -//#define LOCAL_TEST_WITH_API_LEAKS -#ifdef LOCAL_TEST_WITH_API_LEAKS -#include <dlfcn.h> -#include <fcntl.h> -#include <nl_types.h> -#include <setjmp.h> -#include <string.h> -#include <sys/stat.h> -#include <sys/types.h> -#include <unistd.h> -#endif - #include "starboard/accessibility.h" #include "starboard/audio_sink.h" #include "starboard/byte_swap.h" @@ -58,27 +45,21 @@ #include "starboard/time_zone.h" #include "starboard/ui_navigation.h" -// TODO: cleanup these hack as we fix the API leaks - -void tmp_dl_iterate_phdr() { - SB_LOG(INFO) << "tmp_dl_iterate_phdr"; -} - -void tmp__cxa_thread_atexit_impl() { - SB_LOG(INFO) << "tmp__cxa_thread_atexit_impl"; -} - namespace starboard { namespace elf_loader { ExportedSymbols::ExportedSymbols() { - map_["SbAccessibilityGetDisplaySettings"] = + map_["SbAccessibilityGetDisplaySettings"] = reinterpret_cast<const void*>(SbAccessibilityGetDisplaySettings); map_["SbAccessibilityGetTextToSpeechSettings"] = reinterpret_cast<const void*>(SbAccessibilityGetTextToSpeechSettings); map_["SbAudioSinkCreate"] = reinterpret_cast<const void*>(SbAudioSinkCreate); map_["SbAudioSinkDestroy"] = reinterpret_cast<const void*>(SbAudioSinkDestroy); +#if SB_API_VERSION >= 11 + map_["SbAudioSinkGetMinBufferSizeInFrames"] = + reinterpret_cast<const void*>(SbAudioSinkGetMinBufferSizeInFrames); +#endif map_["SbAudioSinkGetNearestSupportedSampleFrequency"] = reinterpret_cast<const void*>( SbAudioSinkGetNearestSupportedSampleFrequency); @@ -114,7 +95,11 @@ reinterpret_cast<const void*>(SbConditionVariableWait); map_["SbConditionVariableWaitTimed"] = reinterpret_cast<const void*>(SbConditionVariableWaitTimed); + +#if SB_API_VERSION >= 11 map_["SbCPUFeaturesGet"] = reinterpret_cast<const void*>(SbCPUFeaturesGet); +#endif + map_["SbDecodeTargetGetInfo"] = reinterpret_cast<const void*>(SbDecodeTargetGetInfo); map_["SbDecodeTargetRelease"] = @@ -137,10 +122,14 @@ reinterpret_cast<const void*>(SbDrmDestroySystem); map_["SbDrmGenerateSessionUpdateRequest"] = reinterpret_cast<const void*>(SbDrmGenerateSessionUpdateRequest); + +#if SB_API_VERSION >= 10 map_["SbDrmIsServerCertificateUpdatable"] = reinterpret_cast<const void*>(SbDrmIsServerCertificateUpdatable); map_["SbDrmUpdateServerCertificate"] = reinterpret_cast<const void*>(SbDrmUpdateServerCertificate); +#endif + map_["SbDrmUpdateSession"] = reinterpret_cast<const void*>(SbDrmUpdateSession); map_["SbEventCancel"] = reinterpret_cast<const void*>(SbEventCancel); @@ -173,6 +162,8 @@ map_["SbLogRawFormat"] = reinterpret_cast<const void*>(SbLogRawFormat); map_["SbMediaCanPlayMimeAndKeySystem"] = reinterpret_cast<const void*>(SbMediaCanPlayMimeAndKeySystem); + +#if SB_API_VERSION >= 10 map_["SbMediaGetAudioBufferBudget"] = reinterpret_cast<const void*>(SbMediaGetAudioBufferBudget); map_["SbMediaGetBufferAlignment"] = @@ -196,8 +187,13 @@ reinterpret_cast<const void*>(SbMediaIsBufferPoolAllocateOnDemand); map_["SbMediaIsBufferUsingMemoryPool"] = reinterpret_cast<const void*>(SbMediaIsBufferUsingMemoryPool); +#endif + +#if SB_API_VERSION >= 11 map_["SbMediaSetAudioWriteDuration"] = reinterpret_cast<const void*>(SbMediaSetAudioWriteDuration); +#endif + map_["SbMemoryAllocateAlignedUnchecked"] = reinterpret_cast<const void*>(SbMemoryAllocateAlignedUnchecked); map_["SbMemoryAllocateUnchecked"] = @@ -208,13 +204,23 @@ map_["SbMemoryFree"] = reinterpret_cast<const void*>(SbMemoryFree); map_["SbMemoryFreeAligned"] = reinterpret_cast<const void*>(SbMemoryFreeAligned); + +#if SB_HAS(MMAP) map_["SbMemoryMap"] = reinterpret_cast<const void*>(SbMemoryMap); +#endif map_["SbMemoryMove"] = reinterpret_cast<const void*>(SbMemoryMove); + +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) map_["SbMemoryProtect"] = reinterpret_cast<const void*>(SbMemoryProtect); +#endif + map_["SbMemoryReallocateUnchecked"] = reinterpret_cast<const void*>(SbMemoryReallocateUnchecked); map_["SbMemorySet"] = reinterpret_cast<const void*>(SbMemorySet); + +#if SB_HAS(MMAP) map_["SbMemoryUnmap"] = reinterpret_cast<const void*>(SbMemoryUnmap); +#endif #if SB_HAS(MICROPHONE) map_["SbMicrophoneClose"] = reinterpret_cast<const void*>(SbMicrophoneClose); @@ -241,20 +247,33 @@ map_["SbPlayerDestroy"] = reinterpret_cast<const void*>(SbPlayerDestroy); map_["SbPlayerGetCurrentFrame"] = reinterpret_cast<const void*>(SbPlayerGetCurrentFrame); + +#if SB_API_VERSION >= 10 map_["SbPlayerGetInfo2"] = reinterpret_cast<const void*>(SbPlayerGetInfo2); map_["SbPlayerGetMaximumNumberOfSamplesPerWrite"] = reinterpret_cast<const void*>(SbPlayerGetMaximumNumberOfSamplesPerWrite); + +#endif + map_["SbPlayerOutputModeSupported"] = reinterpret_cast<const void*>(SbPlayerOutputModeSupported); + +#if SB_API_VERSION >= 10 map_["SbPlayerSeek2"] = reinterpret_cast<const void*>(SbPlayerSeek2); +#endif + map_["SbPlayerSetBounds"] = reinterpret_cast<const void*>(SbPlayerSetBounds); map_["SbPlayerSetPlaybackRate"] = reinterpret_cast<const void*>(SbPlayerSetPlaybackRate); map_["SbPlayerSetVolume"] = reinterpret_cast<const void*>(SbPlayerSetVolume); map_["SbPlayerWriteEndOfStream"] = reinterpret_cast<const void*>(SbPlayerWriteEndOfStream); + +#if SB_API_VERSION >= 10 map_["SbPlayerWriteSample2"] = reinterpret_cast<const void*>(SbPlayerWriteSample2); +#endif + map_["SbSocketAccept"] = reinterpret_cast<const void*>(SbSocketAccept); map_["SbSocketBind"] = reinterpret_cast<const void*>(SbSocketBind); map_["SbSocketClearLastError"] = reinterpret_cast<const void*>(SbSocketClearLastError); @@ -317,6 +336,9 @@ reinterpret_cast<const void*>(SbSpeechRecognizerStart); map_["SbSpeechRecognizerStop"] = reinterpret_cast<const void*>(SbSpeechRecognizerStop); +#endif + +#if SB_HAS(SPEECH_SYNTHESIS) map_["SbSpeechSynthesisCancel"] = reinterpret_cast<const void*>(SbSpeechSynthesisCancel); map_["SbSpeechSynthesisSpeak"] = @@ -376,8 +398,12 @@ reinterpret_cast<const void*>(SbSystemGetDeviceType); map_["SbSystemGetErrorString"] = reinterpret_cast<const void*>(SbSystemGetErrorString); + +#if SB_API_VERSION >= 11 map_["SbSystemGetExtension"] = reinterpret_cast<const void*>(SbSystemGetExtension); +#endif + map_["SbSystemGetLastError"] = reinterpret_cast<const void*>(SbSystemGetLastError); map_["SbSystemGetLocaleId"] = @@ -416,12 +442,26 @@ reinterpret_cast<const void*>(SbSystemRequestSuspend); map_["SbSystemRequestUnpause"] = reinterpret_cast<const void*>(SbSystemRequestUnpause); + +#if SB_API_VERSION >= 11 + map_["SbSystemSignWithCertificationSecretKey"] = + reinterpret_cast<const void*>(SbSystemSignWithCertificationSecretKey); +#endif + map_["SbSystemSort"] = reinterpret_cast<const void*>(SbSystemSort); + +#if SB_API_VERSION >= 10 map_["SbSystemSupportsResume"] = reinterpret_cast<const void*>(SbSystemSupportsResume); +#endif + map_["SbSystemSymbolize"] = reinterpret_cast<const void*>(SbSystemSymbolize); + +#if SB_API_VERSION >= 11 map_["SbThreadContextGetPointer"] = reinterpret_cast<const void*>(SbThreadContextGetPointer); +#endif + map_["SbThreadCreate"] = reinterpret_cast<const void*>(SbThreadCreate); map_["SbThreadCreateLocalKey"] = reinterpret_cast<const void*>(SbThreadCreateLocalKey); @@ -435,14 +475,19 @@ reinterpret_cast<const void*>(SbThreadGetLocalValue); map_["SbThreadIsEqual"] = reinterpret_cast<const void*>(SbThreadIsEqual); map_["SbThreadJoin"] = reinterpret_cast<const void*>(SbThreadJoin); + +#if SB_API_VERSION >= 11 map_["SbThreadSamplerCreate"] = reinterpret_cast<const void*>(SbThreadSamplerCreate); + map_["SbThreadSamplerDestroy"] = reinterpret_cast<const void*>(SbThreadSamplerDestroy); map_["SbThreadSamplerFreeze"] = reinterpret_cast<const void*>(SbThreadSamplerFreeze); map_["SbThreadSamplerThaw"] = reinterpret_cast<const void*>(SbThreadSamplerThaw); +#endif + map_["SbThreadSetLocalValue"] = reinterpret_cast<const void*>(SbThreadSetLocalValue); map_["SbThreadSetName"] = reinterpret_cast<const void*>(SbThreadSetName); @@ -450,62 +495,44 @@ map_["SbThreadYield"] = reinterpret_cast<const void*>(SbThreadYield); map_["SbTimeGetMonotonicNow"] = reinterpret_cast<const void*>(SbTimeGetMonotonicNow); + +#if SB_HAS(TIME_THREAD_NOW) map_["SbTimeGetMonotonicThreadNow"] = reinterpret_cast<const void*>(SbTimeGetMonotonicThreadNow); +#endif + map_["SbTimeGetNow"] = reinterpret_cast<const void*>(SbTimeGetNow); map_["SbTimeZoneGetCurrent"] = reinterpret_cast<const void*>(SbTimeZoneGetCurrent); map_["SbTimeZoneGetName"] = reinterpret_cast<const void*>(SbTimeZoneGetName); + #if SB_API_VERSION >= SB_UI_NAVIGATION_VERSION map_["SbUiNavGetInterface"] = reinterpret_cast<const void*>(SbUiNavGetInterface); #endif + map_["SbUserGetCurrent"] = reinterpret_cast<const void*>(SbUserGetCurrent); map_["SbUserGetProperty"] = reinterpret_cast<const void*>(SbUserGetProperty); map_["SbUserGetPropertySize"] = reinterpret_cast<const void*>(SbUserGetPropertySize); map_["SbWindowCreate"] = reinterpret_cast<const void*>(SbWindowCreate); map_["SbWindowDestroy"] = reinterpret_cast<const void*>(SbWindowDestroy); + +#if SB_API_VERSION >= 11 map_["SbWindowGetDiagonalSizeInInches"] = reinterpret_cast<const void*>(SbWindowGetDiagonalSizeInInches); +#endif + map_["SbWindowGetPlatformHandle"] = reinterpret_cast<const void*>(SbWindowGetPlatformHandle); map_["SbWindowGetSize"] = reinterpret_cast<const void*>(SbWindowGetSize); map_["SbWindowSetDefaultOptions"] = reinterpret_cast<const void*>(SbWindowSetDefaultOptions); -#ifdef LOCAL_TEST_WITH_API_LEAKS - map_["atexit"] = reinterpret_cast<const void*>(atexit); - map_["btowc"] = reinterpret_cast<const void*>(btowc); - map_["__ctype_get_mb_cur_max"] = - map_["__cxa_thread_atexit_impl"] = - reinterpret_cast<const void*>(tmp__cxa_thread_atexit_impl); - map_["dladdr"] = reinterpret_cast<const void*>(dladdr); - map_["dl_iterate_phdr"] = reinterpret_cast<const void*>(tmp_dl_iterate_phdr); - map_["longjmp"] = reinterpret_cast<const void*>(longjmp); - map_["mbrlen"] = reinterpret_cast<const void*>(mbrlen); - map_["mbrtowc"] = reinterpret_cast<const void*>(mbrtowc); - map_["mbsnrtowcs"] = reinterpret_cast<const void*>(mbsnrtowcs); - map_["mbsrtowcs"] = reinterpret_cast<const void*>(mbsrtowcs); - map_["mbtowc"] = reinterpret_cast<const void*>(mbtowc); - - map_["setjmp"] = reinterpret_cast<const void*>(setjmp); - map_["wcrtomb"] = reinterpret_cast<const void*>(wcrtomb); - map_["wcsnrtombs"] = reinterpret_cast<const void*>(wcsnrtombs); - map_["wcstod"] = reinterpret_cast<const void*>(wcstod); - map_["wcstof"] = reinterpret_cast<const void*>(wcstof); - map_["wcstol"] = reinterpret_cast<const void*>(wcstol); - map_["wcstold"] = reinterpret_cast<const void*>(wcstold); - map_["wcstoll"] = reinterpret_cast<const void*>(wcstoll); - map_["wcstoul"] = reinterpret_cast<const void*>(wcstoul); - map_["wcstoull"] = reinterpret_cast<const void*>(wcstoull); - map_["wcsxfrm_l"] = reinterpret_cast<const void*>(wcsxfrm_l); - map_["wctob"] = reinterpret_cast<const void*>(wctob); -#endif } const void* ExportedSymbols::Lookup(const char* name) { const void* ret = map_[name]; - SB_CHECK(ret); + SB_CHECK(ret) << name; return ret; } } // namespace elf_loader
diff --git a/src/starboard/elf_loader/program_table.cc b/src/starboard/elf_loader/program_table.cc index 7542604..7b48e3c 100644 --- a/src/starboard/elf_loader/program_table.cc +++ b/src/starboard/elf_loader/program_table.cc
@@ -18,10 +18,13 @@ #include "starboard/memory.h" #define MAYBE_MAP_FLAG(x, from, to) (((x) & (from)) ? (to) : 0) + +#if SB_CAN(MAP_EXECUTABLE_MEMORY) #define PFLAGS_TO_PROT(x) \ (MAYBE_MAP_FLAG((x), PF_X, kSbMemoryMapProtectExec) | \ MAYBE_MAP_FLAG((x), PF_R, kSbMemoryMapProtectRead) | \ MAYBE_MAP_FLAG((x), PF_W, kSbMemoryMapProtectWrite)) +#endif #define MAP_FAILED ((void*)-1) @@ -69,6 +72,7 @@ SB_LOG(INFO) << "page_max - page_min=" << page_max - page_min; +#if SB_HAS(MMAP) phdr_mmap_ = SbMemoryMap(phdr_size_, kSbMemoryMapProtectWrite, "program_header"); if (!phdr_mmap_) { @@ -77,14 +81,16 @@ } SB_LOG(INFO) << "Allocated address=" << phdr_mmap_; - +#else + SB_CHECK(false); +#endif if (!elf_file->ReadFromOffset(page_min, reinterpret_cast<char*>(phdr_mmap_), phdr_size_)) { SB_LOG(ERROR) << "Failed to read program header from file offset: " << page_min; return false; } - +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) bool mp_result = SbMemoryProtect(phdr_mmap_, phdr_size_, kSbMemoryMapProtectRead); SB_LOG(INFO) << "mp_result=" << mp_result; @@ -92,6 +98,10 @@ SB_LOG(ERROR) << "Failed to protect program header"; return false; } +#else + SB_CHECK(false); +#endif + phdr_table_ = reinterpret_cast<Phdr*>(reinterpret_cast<char*>(phdr_mmap_) + page_offset); @@ -130,6 +140,7 @@ << " file_length=" << file_length << " seg_page_start=0x" << std::hex << seg_page_start; +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY) if (file_length != 0) { const int prot_flags = PFLAGS_TO_PROT(phdr->p_flags); SB_LOG(INFO) << "segment prot_flags=" << std::hex << prot_flags; @@ -150,7 +161,6 @@ << file_page_start; return false; } - mp_ret = SbMemoryProtect(seg_addr, file_length, prot_flags); SB_LOG(INFO) << "mp_ret=" << mp_ret; if (!mp_ret) { @@ -162,6 +172,9 @@ return false; } } +#else + SB_CHECK(false); +#endif // if the segment is writable, and does not end on a page boundary, // zero-fill it until the page limit. @@ -177,6 +190,7 @@ // between them. This is done by using a private anonymous // map for all extra pages. if (seg_page_end > seg_file_end) { +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY) bool mprotect_fix = SbMemoryProtect(reinterpret_cast<void*>(seg_file_end), seg_page_end - seg_file_end, kSbMemoryMapProtectWrite); @@ -185,8 +199,13 @@ SB_LOG(ERROR) << "Failed to unprotect end of segment"; return false; } +#else + SB_CHECK(false); +#endif + SbMemorySet(reinterpret_cast<void*>(seg_file_end), 0, seg_page_end - seg_file_end); +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY) SbMemoryProtect(reinterpret_cast<void*>(seg_file_end), seg_page_end - seg_file_end, PFLAGS_TO_PROT(phdr->p_flags)); @@ -195,6 +214,9 @@ SB_LOG(ERROR) << "Failed to protect end of segment"; return false; } +#else + SB_CHECK(false); +#endif } } return true; @@ -277,13 +299,16 @@ Addr seg_page_start = PAGE_START(phdr->p_vaddr) + base_memory_address_; Addr seg_page_end = PAGE_END(phdr->p_vaddr + phdr->p_memsz) + base_memory_address_; - +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) && SB_CAN(MAP_EXECUTABLE_MEMORY) int ret = SbMemoryProtect(reinterpret_cast<void*>(seg_page_start), seg_page_end - seg_page_start, PFLAGS_TO_PROT(phdr->p_flags) | extra_prot_flags); if (ret < 0) { return -1; } +#else + SB_CHECK(false); +#endif } return 0; } @@ -297,6 +322,7 @@ SB_LOG(INFO) << "Load size=" << load_size_; +#if SB_API_VERSION >= 10 && SB_HAS(MMAP) load_start_ = SbMemoryMap(load_size_, kSbMemoryMapProtectReserved, "reserved_mem"); if (load_start_ == MAP_FAILED) { @@ -304,7 +330,9 @@ << " bytes of address space"; return false; } - +#else + SB_CHECK(false); +#endif base_memory_address_ = reinterpret_cast<Addr>(load_start_); SB_LOG(INFO) << "Load start=" << std::hex << load_start_ @@ -317,12 +345,16 @@ } ProgramTable::~ProgramTable() { +#if SB_HAS(MMAP) if (load_start_) { SbMemoryUnmap(load_start_, load_size_); } if (phdr_mmap_) { SbMemoryUnmap(phdr_mmap_, phdr_size_); } +#else + SB_CHECK(false); +#endif } } // namespace elf_loader
diff --git a/src/starboard/elf_loader/relocations.cc b/src/starboard/elf_loader/relocations.cc index 4b7131c..dae9157 100644 --- a/src/starboard/elf_loader/relocations.cc +++ b/src/starboard/elf_loader/relocations.cc
@@ -242,7 +242,6 @@ #if defined(USE_RELA) bool Relocations::ApplyResolvedReloc(const Rela* rela, Addr sym_addr) { const Word rela_type = ELF_R_TYPE(rela->r_info); - const Word rela_symbol = ELF_R_SYM(rela->r_info); const Sword addend = rela->r_addend; const Addr reloc = static_cast<Addr>(rela->r_offset + base_memory_address_); @@ -274,10 +273,6 @@ SB_LOG(INFO) << " R_AARCH64_RELATIVE target=" << std::hex << target << " " << *target << " bias=" << base_memory_address_ + addend; - if (!rela_symbol) { - SB_LOG(ERROR) << "Invalid relative relocation with symbol"; - return false; - } *target = base_memory_address_ + addend; break; @@ -302,11 +297,6 @@ break; case R_X86_64_RELATIVE: - if (rela_symbol) { - SB_LOG(ERROR) << "Invalid R_X86_64_RELATIVE"; - return false; - } - SB_LOG(INFO) << " R_X86_64_RELATIVE target=" << std::hex << target << " " << *target << " bias=" << base_memory_address_ + addend; *target = base_memory_address_ + addend; @@ -331,8 +321,6 @@ #else bool Relocations::ApplyResolvedReloc(const Rel* rel, Addr sym_addr) { const Word rel_type = ELF_R_TYPE(rel->r_info); - const Word rel_symbol = ELF_R_SYM(rel->r_info); - const Addr reloc = static_cast<Addr>(rel->r_offset + base_memory_address_); SB_LOG(INFO) << " rel reloc=0x" << std::hex << reloc << " offset=0x" @@ -369,10 +357,6 @@ case R_ARM_RELATIVE: SB_LOG(INFO) << " RR_ARM_RELATIVE target=" << std::hex << target << " " << *target << " bias=" << base_memory_address_; - if (!rel_symbol) { - SB_LOG(ERROR) << "Invalid relative relocation with symbol"; - return false; - } *target += base_memory_address_; break; @@ -401,10 +385,6 @@ break; case R_386_RELATIVE: - if (rel_symbol) { - SB_LOG(ERROR) << "Invalid relative relocation with symbol"; - return false; - } SB_LOG(INFO) << " R_386_RELATIVE target=" << std::hex << target << " " << *target << " bias=" << base_memory_address_;
diff --git a/src/starboard/linux/shared/drm_create_system.cc b/src/starboard/linux/shared/drm_create_system.cc index 93ac58b..cde9aa9 100644 --- a/src/starboard/linux/shared/drm_create_system.cc +++ b/src/starboard/linux/shared/drm_create_system.cc
@@ -22,11 +22,8 @@ const char* key_system, void* context, SbDrmSessionUpdateRequestFunc update_request_callback, - SbDrmSessionUpdatedFunc session_updated_callback -#if SB_HAS(DRM_KEY_STATUSES) - , + SbDrmSessionUpdatedFunc session_updated_callback, SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 , SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback, @@ -37,11 +34,9 @@ if (!update_request_callback || !session_updated_callback) { return kSbDrmSystemInvalid; } -#if SB_HAS(DRM_KEY_STATUSES) if (!key_statuses_changed_callback) { return kSbDrmSystemInvalid; } -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 if (!server_certificate_updated_callback || !session_closed_callback) { return kSbDrmSystemInvalid; @@ -52,11 +47,8 @@ return kSbDrmSystemInvalid; } return new DrmSystemWidevine(context, update_request_callback, - session_updated_callback -#if SB_HAS(DRM_KEY_STATUSES) - , + session_updated_callback, key_statuses_changed_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 , server_certificate_updated_callback
diff --git a/src/starboard/linux/shared/gyp_configuration.py b/src/starboard/linux/shared/gyp_configuration.py index 56673d5..c77e593 100644 --- a/src/starboard/linux/shared/gyp_configuration.py +++ b/src/starboard/linux/shared/gyp_configuration.py
@@ -71,6 +71,18 @@ }) return env_variables + def GetTestEnvVariables(self): + # Due to fragile nature of dynamic TLS tracking, in particular LSAN reliance + # on GLIBC private APIs, tracking TLS leaks is unstable and can trigger + # sporadic false positives and/or crashes, depending on the used compiler, + # direct library dependencies and runtime-loaded dynamic libraries. Hence, + # TLS leak tracing in LSAN is turned off. + # For reference, https://sourceware.org/ml/libc-alpha/2018-02/msg00567.html + # When failing, 'LeakSanitizer has encountered a fatal error' message would + # be printed at test shutdown, and env var LSAN_OPTIONS=verbosity=2 would + # further point to 'Scanning DTLS range ..' prior to crash. + return {'ASAN_OPTIONS': 'intercept_tls_get_addr=0'} + def GetTestFilters(self): filters = super(LinuxConfiguration, self).GetTestFilters() for target, tests in self.__FILTERED_TESTS.iteritems():
diff --git a/src/starboard/linux/shared/media_is_audio_supported.cc b/src/starboard/linux/shared/media_is_audio_supported.cc index f20d64a..d0d9c7a 100644 --- a/src/starboard/linux/shared/media_is_audio_supported.cc +++ b/src/starboard/linux/shared/media_is_audio_supported.cc
@@ -23,7 +23,6 @@ return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND; } -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) if (audio_codec == kSbMediaAudioCodecOpus) { return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND; } @@ -34,7 +33,6 @@ return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND; } #endif // SB_HAS(AC3_AUDIO) -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) return false; }
diff --git a/src/starboard/linux/shared/starboard_platform.gypi b/src/starboard/linux/shared/starboard_platform.gypi index b4f4566..1297986 100644 --- a/src/starboard/linux/shared/starboard_platform.gypi +++ b/src/starboard/linux/shared/starboard_platform.gypi
@@ -227,6 +227,7 @@ '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_create.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_destroy.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_max_channels_5_1.cc', + '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_nearest_supported_sample_frequency.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_internal.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_internal.h', @@ -317,7 +318,7 @@ '<(DEPTH)/starboard/shared/starboard/window_set_default_options.cc', '<(DEPTH)/starboard/shared/stub/accessibility_get_display_settings.cc', '<(DEPTH)/starboard/shared/stub/accessibility_get_text_to_speech_settings.cc', - '<(DEPTH)/starboard/shared/stub/cpu_features_get.cc', + '<(DEPTH)/starboard/shared/linux/cpu_features_get.cc', '<(DEPTH)/starboard/shared/stub/cryptography_create_transformer.cc', '<(DEPTH)/starboard/shared/stub/cryptography_destroy_transformer.cc', '<(DEPTH)/starboard/shared/stub/cryptography_get_tag.cc', @@ -339,6 +340,7 @@ '<(DEPTH)/starboard/shared/stub/system_get_used_gpu_memory.cc', '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc', '<(DEPTH)/starboard/shared/stub/system_raise_platform_error.cc', + '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc', '<(DEPTH)/starboard/shared/stub/ui_nav_get_interface.cc', '<(DEPTH)/starboard/shared/stub/window_get_diagonal_size_in_inches.cc', ],
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/atomic_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/10/atomic_public.h new file mode 100644 index 0000000..071ab1b --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/atomic_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_ATOMIC_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_ATOMIC_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/atomic_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/configuration_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/10/configuration_public.h new file mode 100644 index 0000000..53a5d3f --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/configuration_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_CONFIGURATION_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_CONFIGURATION_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/configuration_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.gypi b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.gypi new file mode 100644 index 0000000..d9855d7 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.gypi
@@ -0,0 +1,40 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'target_defaults': { + 'default_configuration': 'linux-x64x11-blittergles-sbversion-10_debug', + 'configurations': { + 'linux-x64x11-blittergles-sbversion-10_debug': { + 'inherit_from': ['debug_base'], + }, + 'linux-x64x11-blittergles-sbversion-10_devel': { + 'inherit_from': ['devel_base'], + }, + 'linux-x64x11-blittergles-sbversion-10_qa': { + 'inherit_from': ['qa_base'], + }, + 'linux-x64x11-blittergles-sbversion-10_gold': { + 'inherit_from': ['gold_base'], + }, + }, # end of configurations + }, + + 'includes': [ + '<(DEPTH)/starboard/linux/x64x11/blittergles/gyp_configuration.gypi', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.py b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.py new file mode 100644 index 0000000..046bf56 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/gyp_configuration.py
@@ -0,0 +1,25 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. +"""Starboard Linux X64X11 Blittergles Sbversion 10 platform configuration.""" + + +from starboard.linux.x64x11 import gyp_configuration as parent_configuration + + +def CreatePlatformConfig(): + return parent_configuration.LinuxX64X11Configuration( + 'linux-x64x11-blittergles-sbversion-10')
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform.gyp new file mode 100644 index 0000000..8163408 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform.gyp
@@ -0,0 +1,24 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'includes': [ + # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file. The idea + # is that we just want this file to *be* the parent gyp file. + '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform.gyp', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform_tests.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform_tests.gyp new file mode 100644 index 0000000..94e7cc2 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/starboard_platform_tests.gyp
@@ -0,0 +1,24 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'includes': [ + # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file. The idea + # is that we just want this file to *be* the parent gyp file. + '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform_tests.gyp', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/10/thread_types_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/10/thread_types_public.h new file mode 100644 index 0000000..cfe4a35 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/10/thread_types_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_THREAD_TYPES_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_THREAD_TYPES_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/thread_types_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_10_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/atomic_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/11/atomic_public.h new file mode 100644 index 0000000..0fdbbea --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/atomic_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_ATOMIC_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_ATOMIC_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/atomic_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/configuration_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/11/configuration_public.h new file mode 100644 index 0000000..55cf0ba --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/configuration_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_CONFIGURATION_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_CONFIGURATION_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/configuration_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.gypi b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.gypi new file mode 100644 index 0000000..573d659 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.gypi
@@ -0,0 +1,40 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'target_defaults': { + 'default_configuration': 'linux-x64x11-blittergles-sbversion-11_debug', + 'configurations': { + 'linux-x64x11-blittergles-sbversion-11_debug': { + 'inherit_from': ['debug_base'], + }, + 'linux-x64x11-blittergles-sbversion-11_devel': { + 'inherit_from': ['devel_base'], + }, + 'linux-x64x11-blittergles-sbversion-11_qa': { + 'inherit_from': ['qa_base'], + }, + 'linux-x64x11-blittergles-sbversion-11_gold': { + 'inherit_from': ['gold_base'], + }, + }, # end of configurations + }, + + 'includes': [ + '<(DEPTH)/starboard/linux/x64x11/blittergles/gyp_configuration.gypi', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.py b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.py new file mode 100644 index 0000000..ff1fc94 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/gyp_configuration.py
@@ -0,0 +1,24 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. +"""Starboard Linux X64X11 Blittergles Sbversion 11 platform configuration.""" + +from starboard.linux.x64x11 import gyp_configuration as parent_configuration + + +def CreatePlatformConfig(): + return parent_configuration.LinuxX64X11Configuration( + 'linux-x64x11-blittergles-sbversion-11')
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform.gyp new file mode 100644 index 0000000..8163408 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform.gyp
@@ -0,0 +1,24 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'includes': [ + # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file. The idea + # is that we just want this file to *be* the parent gyp file. + '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform.gyp', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform_tests.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform_tests.gyp new file mode 100644 index 0000000..94e7cc2 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/starboard_platform_tests.gyp
@@ -0,0 +1,24 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'includes': [ + # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file. The idea + # is that we just want this file to *be* the parent gyp file. + '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform_tests.gyp', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/11/thread_types_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/11/thread_types_public.h new file mode 100644 index 0000000..3f38d1c --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/11/thread_types_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_THREAD_TYPES_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_THREAD_TYPES_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/thread_types_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_11_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/atomic_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/6/atomic_public.h new file mode 100644 index 0000000..d2414dd --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/atomic_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_ATOMIC_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_ATOMIC_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/atomic_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_ATOMIC_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/configuration_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/6/configuration_public.h new file mode 100644 index 0000000..e73676b --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/configuration_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_CONFIGURATION_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_CONFIGURATION_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/configuration_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_CONFIGURATION_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.gypi b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.gypi new file mode 100644 index 0000000..44aba2b --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.gypi
@@ -0,0 +1,40 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'target_defaults': { + 'default_configuration': 'linux-x64x11-blittergles-sbversion-6_debug', + 'configurations': { + 'linux-x64x11-blittergles-sbversion-6_debug': { + 'inherit_from': ['debug_base'], + }, + 'linux-x64x11-blittergles-sbversion-6_devel': { + 'inherit_from': ['devel_base'], + }, + 'linux-x64x11-blittergles-sbversion-6_qa': { + 'inherit_from': ['qa_base'], + }, + 'linux-x64x11-blittergles-sbversion-6_gold': { + 'inherit_from': ['gold_base'], + }, + }, # end of configurations + }, + + 'includes': [ + '<(DEPTH)/starboard/linux/x64x11/blittergles/gyp_configuration.gypi', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.py b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.py new file mode 100644 index 0000000..6930874 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/gyp_configuration.py
@@ -0,0 +1,39 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. +"""Starboard Linux X64X11 Blittergles Sbversion 6 platform configuration.""" + +from starboard.linux.x64x11 import gyp_configuration as parent_configuration + + +class LinuxX64X11BlitterglesSbversion6Configuration( + parent_configuration.LinuxX64X11Configuration('linux-x64x11-blittergles')): + + def GetVariables(self, config_name): + variables = super(LinuxX64X11BlitterglesSbversion6Configuration, + self).GetVariables(config_name) + # V8 requires new Starboard features so we must use SpiderMonkey in older + # versions of Starboard. + variables.update({ + 'javascript_engine': 'mozjs-45', + 'cobalt_enable_jit': 0, + }) + return variables + + +def CreatePlatformConfig(): + return parent_configuration.LinuxX64X11Configuration( + 'linux-x64x11-blittergles-sbversion-6')
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform.gyp new file mode 100644 index 0000000..8163408 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform.gyp
@@ -0,0 +1,24 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'includes': [ + # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file. The idea + # is that we just want this file to *be* the parent gyp file. + '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform.gyp', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform_tests.gyp b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform_tests.gyp new file mode 100644 index 0000000..94e7cc2 --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/starboard_platform_tests.gyp
@@ -0,0 +1,24 @@ +# Copyright 2019 The Cobalt Authors. All Rights Reserved. +# +# 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. + +# This file was initially generated by starboard/tools/create_derived_build.py, +# though it may have been modified since its creation. + +{ + 'includes': [ + # Note that we are 'includes'ing a 'gyp' file, not a 'gypi' file. The idea + # is that we just want this file to *be* the parent gyp file. + '<(DEPTH)/starboard/linux/x64x11/blittergles/starboard_platform_tests.gyp', + ], +}
diff --git a/src/starboard/linux/x64x11/blittergles/sbversion/6/thread_types_public.h b/src/starboard/linux/x64x11/blittergles/sbversion/6/thread_types_public.h new file mode 100644 index 0000000..6e977ae --- /dev/null +++ b/src/starboard/linux/x64x11/blittergles/sbversion/6/thread_types_public.h
@@ -0,0 +1,23 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// This file was initially generated by starboard/tools/create_derived_build.py, +// though it may have been modified since its creation. + +#ifndef STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_THREAD_TYPES_PUBLIC_H_ +#define STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_THREAD_TYPES_PUBLIC_H_ + +#include "starboard/linux/x64x11/blittergles/thread_types_public.h" + +#endif // STARBOARD_LINUX_X64X11_BLITTERGLES_SBVERSION_6_THREAD_TYPES_PUBLIC_H_
diff --git a/src/starboard/linux/x64x11/clang/3.6/download_clang.sh b/src/starboard/linux/x64x11/clang/3.6/download_clang.sh index 15815a2..0117209 100755 --- a/src/starboard/linux/x64x11/clang/3.6/download_clang.sh +++ b/src/starboard/linux/x64x11/clang/3.6/download_clang.sh
@@ -24,9 +24,9 @@ binary_path="llvm/Release+Asserts/bin/clang++" -# This version of clang depends on libstdc++-7, version 7.3.0. +# This version of clang depends on libstdc++-7, version 7.4.0. # The package "libstdc++-7-dev" provides that version. -libstdcxx_version="7.3.0" +libstdcxx_version="7.4.0" libstdcxx_path="libstdc++-7" libstdcxx_symlink_folder="${libstdcxx_path}/lib/gcc/x86_64-linux-gnu" symlink_path="${libstdcxx_symlink_folder}/${libstdcxx_version}"
diff --git a/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi b/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi index 639e270..cd8b46d 100644 --- a/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi +++ b/src/starboard/linux/x64x11/gcc/6.3/compiler_flags.gypi
@@ -74,6 +74,12 @@ '-fno-delete-null-pointer-checks', # Do not warn about unused function params. '-Wno-unused-parameter', + # Do not warn about multi-character character constant values. + '-Wno-multichar', + # Do not warn for ignoring return value declared with attribute warn_unused_result. + '-Wno-unused-result', + # Do now warn for unknown pragmas. + '-Wno-unknown-pragmas', ], 'conditions': [ ['cobalt_fastbuild==0', {
diff --git a/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh b/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh index 6453533..efdd807 100755 --- a/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh +++ b/src/starboard/linux/x64x11/gcc/6.3/download_gcc.sh
@@ -24,7 +24,8 @@ binary_path="gcc/bin/g++" build_duration="about 40 minutes" -cd $(dirname $0) +scriptfolder=$(dirname $(realpath $0)) +cd ${scriptfolder} source ../../toolchain_paths.sh ( @@ -35,7 +36,14 @@ wget -c http://ftpmirror.gnu.org/gcc/gcc-${version}/${file}.sig wget -c http://ftp.gnu.org/gnu/gnu-keyring.gpg signature_invalid=`gpg --verify --no-default-keyring --keyring ./gnu-keyring.gpg ${file}.sig` - if [ $signature_invalid ]; then echo "Invalid signature" ; exit 1 ; fi + if [ $signature_invalid ]; then + echo "Invalid signature for " $file + exit 1 + fi + echo "f06ae7f3f790fbf0f018f6d40e844451e6bc3b7bc96e128e63b09825c1f8b29f gcc-6.3.0.tar.bz2" | sha256sum -c || ( + echo "Invalid Checksum for " $file + exit 1 + ) rm -rf gcc-${version} tar -xjf ${file} cd gcc-${version} @@ -43,9 +51,20 @@ if [ -f ./contrib/download_prerequisites ]; then ./contrib/download_prerequisites fi + + cat <<EOF | sha256sum -c || ( echo "Invalid Checksum for prerequisites"; exit 1 ) +c7e75a08a8d49d2082e4caee1591a05d11b9d5627514e678f02d66a124bcf2ba mpfr-2.4.2.tar.bz2 +936162c0312886c21581002b79932829aa048cfaf9937c6265aeaa14f1cd1775 gmp-4.3.2.tar.bz2 +e664603757251fd8a352848276497a4c79b7f8b21fd8aedd5cc0598a38fee3e4 mpc-0.8.1.tar.gz +8ceebbf4d9a81afa2b4449113cee4b7cb14a687d7a549a963deb5e2a41458b6b isl-0.15.tar.bz2 +EOF cd ${toolchain_path} fi + # Patches for compiling with gcc 7.2 + patch -p1 <${scriptfolder}/ucontext.diff + patch -p1 <${scriptfolder}/nosanitizer.diff + # Create clean build folder for gcc rm -rf gcc gcc-${version}-build mkdir gcc-${version}-build
diff --git a/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py b/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py index a5e7568..0066119 100644 --- a/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py +++ b/src/starboard/linux/x64x11/gcc/6.3/gyp_configuration.py
@@ -49,13 +49,13 @@ return variables def GetEnvironmentVariables(self): - env_variables = super(LinuxX64X11Gcc63Configuration, - self).GetEnvironmentVariables() toolchain_bin_dir = os.path.join(self.toolchain_dir, 'bin') - env_variables.update({ + env_variables = { 'CC': os.path.join(toolchain_bin_dir, 'gcc'), 'CXX': os.path.join(toolchain_bin_dir, 'g++'), - }) + 'CC_HOST': os.path.join(toolchain_bin_dir, 'gcc'), + 'CXX_HOST': os.path.join(toolchain_bin_dir, 'g++'), + } return env_variables
diff --git a/src/starboard/linux/x64x11/gcc/6.3/nosanitizer.diff b/src/starboard/linux/x64x11/gcc/6.3/nosanitizer.diff new file mode 100644 index 0000000..838bf56 --- /dev/null +++ b/src/starboard/linux/x64x11/gcc/6.3/nosanitizer.diff
@@ -0,0 +1,17 @@ +diff -ur x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libsanitizer/configure.tgt x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libsanitizer/configure.tgt +--- x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libsanitizer/configure.tgt 2015-11-23 01:07:18.000000000 -0800 ++++ x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libsanitizer/configure.tgt 2019-08-13 15:41:51.394524015 -0700 +@@ -21,13 +21,6 @@ + # Filter out unsupported systems. + TSAN_TARGET_DEPENDENT_OBJECTS= + case "${target}" in +- x86_64-*-linux* | i?86-*-linux*) +- if test x$ac_cv_sizeof_void_p = x8; then +- TSAN_SUPPORTED=yes +- LSAN_SUPPORTED=yes +- TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_amd64.lo +- fi +- ;; + powerpc*-*-linux*) + ;; + sparc*-*-linux*)
diff --git a/src/starboard/linux/x64x11/gcc/6.3/ucontext.diff b/src/starboard/linux/x64x11/gcc/6.3/ucontext.diff new file mode 100644 index 0000000..31206da --- /dev/null +++ b/src/starboard/linux/x64x11/gcc/6.3/ucontext.diff
@@ -0,0 +1,33 @@ +diff -ur x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h +--- x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h 2016-01-04 06:30:50.000000000 -0800 ++++ x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/aarch64/linux-unwind.h 2019-08-13 14:11:12.318898306 -0700 +@@ -52,7 +52,7 @@ + struct rt_sigframe + { + siginfo_t info; +- struct ucontext uc; ++ ucontext_t uc; + }; + + struct rt_sigframe *rt_; +diff -ur x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/i386/linux-unwind.h x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/i386/linux-unwind.h +--- x86_64-linux-gnu-gcc-6.3.0.orig/gcc-6.3.0/libgcc/config/i386/linux-unwind.h 2016-01-04 06:30:50.000000000 -0800 ++++ x86_64-linux-gnu-gcc-6.3.0/gcc-6.3.0/libgcc/config/i386/linux-unwind.h 2019-08-13 14:11:20.386855553 -0700 +@@ -58,7 +58,7 @@ + if (*(unsigned char *)(pc+0) == 0x48 + && *(unsigned long long *)(pc+1) == RT_SIGRETURN_SYSCALL) + { +- struct ucontext *uc_ = context->cfa; ++ ucontext_t *uc_ = context->cfa; + /* The void * cast is necessary to avoid an aliasing warning. + The aliasing warning is correct, but should not be a problem + because it does not alias anything. */ +@@ -138,7 +138,7 @@ + siginfo_t *pinfo; + void *puc; + siginfo_t info; +- struct ucontext uc; ++ ucontext_t uc; + } *rt_ = context->cfa; + /* The void * cast is necessary to avoid an aliasing warning. + The aliasing warning is correct, but should not be a problem
diff --git a/src/starboard/linux/x64x11/mock/gyp_configuration.py b/src/starboard/linux/x64x11/mock/gyp_configuration.py index 450394f..2abddb0 100644 --- a/src/starboard/linux/x64x11/mock/gyp_configuration.py +++ b/src/starboard/linux/x64x11/mock/gyp_configuration.py
@@ -27,8 +27,13 @@ return 'ninja,qtcreator_ninja' def GetVariables(self, configuration): - return super(LinuxX64X11MockConfiguration, self).GetVariables( + variables = super(LinuxX64X11MockConfiguration, self).GetVariables( configuration, use_clang=1) + variables.update({ + 'javascript_engine': 'mozjs-45', + 'cobalt_enable_jit': 0, + }) + return variables def GetGeneratorVariables(self, configuration): del configuration
diff --git a/src/starboard/media.h b/src/starboard/media.h index a34a3a4..e890124 100644 --- a/src/starboard/media.h +++ b/src/starboard/media.h
@@ -496,11 +496,7 @@ // The AudioSpecificConfig, as specified in ISO/IEC-14496-3, section 1.6.2.1: // http://read.pudn.com/downloads98/doc/comm/401153/14496/ISO_IEC_14496-3%20Part%203%20Audio/C036083E_SUB1.PDF -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) const void* audio_specific_config; -#else // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) - int8_t audio_specific_config[8]; -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) } SbMediaAudioSampleInfo; #if SB_API_VERSION < 11
diff --git a/src/starboard/nplb/audio_sink_get_min_buffer_size_in_frames_test.cc b/src/starboard/nplb/audio_sink_get_min_buffer_size_in_frames_test.cc new file mode 100644 index 0000000..a07a8c8 --- /dev/null +++ b/src/starboard/nplb/audio_sink_get_min_buffer_size_in_frames_test.cc
@@ -0,0 +1,56 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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 "starboard/audio_sink.h" +#include "testing/gtest/include/gtest/gtest.h" + +namespace starboard { +namespace nplb { + +#if SB_API_VERSION >= 11 +TEST(SbAudioSinkGetMinBufferSizeInFramesTest, SunnyDay) { + SbMediaAudioSampleType sample_type = kSbMediaAudioSampleTypeFloat32; + if (!SbAudioSinkIsAudioSampleTypeSupported(sample_type)) { + sample_type = kSbMediaAudioSampleTypeInt16Deprecated; + } + const int kDefaultSampleFrequency = 48000; + int max_channels = SbAudioSinkGetMaxChannels(); + int min_required_frames = SbAudioSinkGetMinBufferSizeInFrames( + max_channels, sample_type, + SbAudioSinkGetNearestSupportedSampleFrequency(kDefaultSampleFrequency)); + + EXPECT_GT(min_required_frames, 0); + EXPECT_LE(min_required_frames, 10 * 1024); + + if (max_channels > 1) { + min_required_frames = SbAudioSinkGetMinBufferSizeInFrames( + 1, sample_type, + SbAudioSinkGetNearestSupportedSampleFrequency(kDefaultSampleFrequency)); + + EXPECT_GT(min_required_frames, 0); + EXPECT_LE(min_required_frames, 10 * 1024); + } + if (max_channels > 2) { + min_required_frames = SbAudioSinkGetMinBufferSizeInFrames( + 2, sample_type, + SbAudioSinkGetNearestSupportedSampleFrequency(kDefaultSampleFrequency)); + + EXPECT_GT(min_required_frames, 0); + EXPECT_LE(min_required_frames, 10 * 1024); + } +} +#endif // SB_API_VERSION >= 11 + +} // namespace nplb +} // namespace starboard
diff --git a/src/starboard/nplb/directory_get_next_test.cc b/src/starboard/nplb/directory_get_next_test.cc index d382284..24c05ba 100644 --- a/src/starboard/nplb/directory_get_next_test.cc +++ b/src/starboard/nplb/directory_get_next_test.cc
@@ -103,6 +103,20 @@ EXPECT_FALSE(SbDirectoryGetNext(kSbDirectoryInvalid, NULL)); } +TEST(SbDirectoryGetNextTest, FailureOnEmptyDirectory) { + ScopedRandomFile dir(ScopedRandomFile::kDontCreate); + const std::string& path = dir.filename(); + ASSERT_TRUE(SbDirectoryCreate(path.c_str())); + SbFileError error = kSbFileErrorMax; + SbDirectory directory = SbDirectoryOpen(path.c_str(), &error); + ASSERT_TRUE(SbDirectoryIsValid(directory)); + ASSERT_EQ(kSbFileOk, error); + + SbDirectoryEntry entry = {0}; + EXPECT_FALSE(SbDirectoryGetNext(directory, &entry)); + ASSERT_TRUE(SbDirectoryClose(directory)); +} + } // namespace } // namespace nplb } // namespace starboard
diff --git a/src/starboard/nplb/drm_create_system_test.cc b/src/starboard/nplb/drm_create_system_test.cc index a59b86a..0b68275 100644 --- a/src/starboard/nplb/drm_create_system_test.cc +++ b/src/starboard/nplb/drm_create_system_test.cc
@@ -119,7 +119,7 @@ EXPECT_FALSE(SbDrmSystemIsValid(drm_system)); SbDrmDestroySystem(drm_system); } -#elif SB_HAS(DRM_KEY_STATUSES) +#else // SB_HAS(DRM_SESSION_CLOSED) { SbDrmSystem drm_system = SbDrmCreateSystem( key_system, NULL /* context */, @@ -143,21 +143,7 @@ EXPECT_FALSE(SbDrmSystemIsValid(drm_system)); SbDrmDestroySystem(drm_system); } -#else - { - SbDrmSystem drm_system = SbDrmCreateSystem( - key_system, NULL /* context */, - NULL /* session_update_request_func */, DummySessionUpdatedFunc); - EXPECT_FALSE(SbDrmSystemIsValid(drm_system)); - } - { - SbDrmSystem drm_system = SbDrmCreateSystem( - key_system, NULL /* context */, DummySessionUpdateRequestFunc, - NULL /* session_updated_func */); - EXPECT_FALSE(SbDrmSystemIsValid(drm_system)); - SbDrmDestroySystem(drm_system); - } -#endif // SB_HAS(DRM_KEY_STATUSES) +#endif // SB_HAS(DRM_SESSION_CLOSED) } } #endif // SB_API_VERSION >= 10
diff --git a/src/starboard/nplb/drm_helpers.cc b/src/starboard/nplb/drm_helpers.cc index 83a7a5e..930fb82 100644 --- a/src/starboard/nplb/drm_helpers.cc +++ b/src/starboard/nplb/drm_helpers.cc
@@ -67,7 +67,6 @@ #endif // SB_API_VERSION >= 10 -#if SB_HAS(DRM_KEY_STATUSES) void DummySessionKeyStatusesChangedFunc(SbDrmSystem drm_system, void* context, const void* session_id, @@ -75,7 +74,6 @@ int number_of_keys, const SbDrmKeyId* key_ids, const SbDrmKeyStatus* key_statuses) {} -#endif // SB_HAS(DRM_KEY_STATUSES) void DummySessionClosedFunc(SbDrmSystem drm_system, void* context, @@ -93,15 +91,11 @@ key_system, NULL /* context */, DummySessionUpdateRequestFunc, DummySessionUpdatedFunc, DummySessionKeyStatusesChangedFunc, DummySessionClosedFunc); -#elif SB_HAS(DRM_KEY_STATUSES) +#else // SB_HAS(DRM_SESSION_CLOSED) return SbDrmCreateSystem( key_system, NULL /* context */, DummySessionUpdateRequestFunc, DummySessionUpdatedFunc, DummySessionKeyStatusesChangedFunc); -#else // SB_HAS(DRM_KEY_STATUSES) - return SbDrmCreateSystem(key_system, NULL /* context */, - DummySessionUpdateRequestFunc, - DummySessionUpdatedFunc); -#endif // SB_HAS(DRM_KEY_STATUSES) +#endif // SB_HAS(DRM_SESSION_CLOSED) } } // namespace nplb
diff --git a/src/starboard/nplb/drm_helpers.h b/src/starboard/nplb/drm_helpers.h index d48ed5e..f6d012d 100644 --- a/src/starboard/nplb/drm_helpers.h +++ b/src/starboard/nplb/drm_helpers.h
@@ -68,7 +68,6 @@ #endif // SB_API_VERSION >= 10 -#if SB_HAS(DRM_KEY_STATUSES) void DummySessionKeyStatusesChangedFunc(SbDrmSystem drm_system, void* context, const void* session_id, @@ -76,7 +75,6 @@ int number_of_keys, const SbDrmKeyId* key_ids, const SbDrmKeyStatus* key_statuses); -#endif // SB_HAS(DRM_KEY_STATUSES) void DummySessionClosedFunc(SbDrmSystem drm_system, void* context,
diff --git a/src/starboard/nplb/media_set_audio_write_duration_test.cc b/src/starboard/nplb/media_set_audio_write_duration_test.cc index 0ca9a37..bcbe76a 100644 --- a/src/starboard/nplb/media_set_audio_write_duration_test.cc +++ b/src/starboard/nplb/media_set_audio_write_duration_test.cc
@@ -242,7 +242,7 @@ SbPlayerDestroy(player); } -TEST_P(SbMediaSetAudioWriteDurationTest, WriteContinuedLimitedInput) { +TEST_P(SbMediaSetAudioWriteDurationTest, FLAKY_WriteContinuedLimitedInput) { ASSERT_NE(dmp_reader_.audio_codec(), kSbMediaAudioCodecNone); ASSERT_GT(dmp_reader_.number_of_audio_buffers(), 0);
diff --git a/src/starboard/nplb/nplb.gyp b/src/starboard/nplb/nplb.gyp index 4338c4d..0dce66d 100644 --- a/src/starboard/nplb/nplb.gyp +++ b/src/starboard/nplb/nplb.gyp
@@ -46,6 +46,7 @@ 'audio_sink_create_test.cc', 'audio_sink_destroy_test.cc', 'audio_sink_get_max_channels_test.cc', + 'audio_sink_get_min_buffer_size_in_frames_test.cc', 'audio_sink_get_nearest_supported_sample_frequency_test.cc', 'audio_sink_helpers.cc', 'audio_sink_helpers.h', @@ -264,6 +265,7 @@ 'system_hide_splash_screen_test.cc', 'system_is_debugger_attached_test.cc', 'system_sort_test.cc', + 'system_sign_with_certification_secret_key_test.cc', 'system_symbolize_test.cc', 'thread_create_test.cc', 'thread_detach_test.cc',
diff --git a/src/starboard/nplb/system_sign_with_certification_secret_key_test.cc b/src/starboard/nplb/system_sign_with_certification_secret_key_test.cc new file mode 100644 index 0000000..7b22229 --- /dev/null +++ b/src/starboard/nplb/system_sign_with_certification_secret_key_test.cc
@@ -0,0 +1,56 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// SbDirectoryClose is well-covered in all the other tests, so just the +// leftovers are here. + +#include <string> + +#include "starboard/system.h" +#include "testing/gtest/include/gtest/gtest.h" + +#if SB_API_VERSION >= 11 + +namespace starboard { +namespace nplb { +namespace { + +TEST(SbSystemSignWithCertificationSecretKeyTest, DoesNotCrash) { + const size_t kDigestSize = 32; + uint8_t digest[kDigestSize]; + + std::string message("test_message"); + SbSystemSignWithCertificationSecretKey( + reinterpret_cast<const uint8_t*>(message.data()), message.size(), digest, + kDigestSize); +} + +// Since SbSystemSignWithCertificationSecretKey() uses the SHA256 algorithm, +// the output digest size must be at least 256 bits, or 32 bytes. +TEST(SbSystemSignWithCertificationSecretKeyTest, + RainyDayFailsOnLessThan32Bytes) { + const size_t kDigestSize = 32; + uint8_t digest[kDigestSize]; + + std::string message("test_message"); + EXPECT_FALSE(SbSystemSignWithCertificationSecretKey( + reinterpret_cast<const uint8_t*>(message.data()), message.size(), digest, + 31)); +} + +} // namespace +} // namespace nplb +} // namespace starboard + +#endif // SB_API_VERSION >= 11
diff --git a/src/starboard/player.h b/src/starboard/player.h index 4cb0cab..08e16d1 100644 --- a/src/starboard/player.h +++ b/src/starboard/player.h
@@ -407,11 +407,9 @@ // Otherwise, |audio_sample_info| can be NULL. See media.h for the format of // the |SbMediaAudioSampleInfo| struct. #endif // SB_API_VERSION < 11 -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) // Note that |audio_specific_config| is a pointer and the content it points to // is no longer valid after this function returns. The implementation has to // make a copy of the content if it is needed after the function returns. -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) #if SB_API_VERSION >= 11 // |max_video_capabilities|: This string communicates the video maximums to the // platform. The web app will not provide a video stream exceeding the
diff --git a/src/starboard/raspi/0/gyp_configuration.py b/src/starboard/raspi/0/gyp_configuration.py index 933c6ee..b247085 100644 --- a/src/starboard/raspi/0/gyp_configuration.py +++ b/src/starboard/raspi/0/gyp_configuration.py
@@ -41,6 +41,11 @@ # TODO: debug these failures. 'SbPlayerTest.MultiPlayer', # crashes ], + # Temporarily disable most of the tests until we can narrow it down to the + # minimum number of cases that are real test failures. + 'player_filter_tests': [ + 'AudioDecoderTest.*', + ], }
diff --git a/src/starboard/raspi/shared/gyp_configuration.py b/src/starboard/raspi/shared/gyp_configuration.py index e7668ea..f25f2a4 100644 --- a/src/starboard/raspi/shared/gyp_configuration.py +++ b/src/starboard/raspi/shared/gyp_configuration.py
@@ -107,7 +107,6 @@ # TODO: debug these failures. 'VideoDecoderTests/VideoDecoderTest.EndOfStreamWithoutAnyInput/0', 'VideoDecoderTests/VideoDecoderTest.MultipleResets/0', - 'VideoDecoderTests/VideoDecoderTest.SingleInvalidInput/*', 'VideoDecoderTests/VideoDecoderTest' '.MultipleValidInputsAfterInvalidKeyFrame/*', 'VideoDecoderTests/VideoDecoderTest.MultipleInvalidInput/*',
diff --git a/src/starboard/raspi/shared/open_max/video_decoder.cc b/src/starboard/raspi/shared/open_max/video_decoder.cc index 2d10bfc..712ff8b 100644 --- a/src/starboard/raspi/shared/open_max/video_decoder.cc +++ b/src/starboard/raspi/shared/open_max/video_decoder.cc
@@ -203,9 +203,6 @@ stream_ended = true; } else if (event->type == Event::kReset) { ScopedLock scoped_lock(mutex_); - component.Flush(); - stream_ended = false; - eos_written = false; while (!freed_buffers_.empty()) { component.DropOutputBuffer(freed_buffers_.front()); @@ -216,6 +213,10 @@ component.DropOutputBuffer(filled_buffers_.front()); filled_buffers_.pop(); } + + component.Flush(); + stream_ended = false; + eos_written = false; } else { SB_NOTREACHED() << "event type " << event->type; }
diff --git a/src/starboard/raspi/shared/starboard_platform.gypi b/src/starboard/raspi/shared/starboard_platform.gypi index b20edc6..3c0ebb4 100644 --- a/src/starboard/raspi/shared/starboard_platform.gypi +++ b/src/starboard/raspi/shared/starboard_platform.gypi
@@ -261,6 +261,7 @@ '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_create.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_destroy.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_max_channels_5_1.cc', + '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_get_nearest_supported_sample_frequency.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_is_audio_frame_storage_type_supported_interleaved_only.cc', '<(DEPTH)/starboard/shared/starboard/audio_sink/audio_sink_is_audio_sample_type_supported_float32_only.cc', @@ -374,6 +375,7 @@ '<(DEPTH)/starboard/shared/stub/system_get_used_gpu_memory.cc', '<(DEPTH)/starboard/shared/stub/system_hide_splash_screen.cc', '<(DEPTH)/starboard/shared/stub/system_raise_platform_error.cc', + '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc', '<(DEPTH)/starboard/shared/stub/ui_nav_get_interface.cc', '<(DEPTH)/starboard/shared/stub/window_get_diagonal_size_in_inches.cc', ],
diff --git a/src/starboard/shared/alsa/alsa_audio_sink_type.cc b/src/starboard/shared/alsa/alsa_audio_sink_type.cc index a55e83f..62ae12b 100644 --- a/src/starboard/shared/alsa/alsa_audio_sink_type.cc +++ b/src/starboard/shared/alsa/alsa_audio_sink_type.cc
@@ -261,6 +261,7 @@ { ScopedLock lock(mutex_); if (destroying_) { + SB_DLOG(INFO) << "alsa::AlsaAudioSink exits idle loop : destroying"; break; } playback_rate = playback_rate_; @@ -270,6 +271,9 @@ update_source_status_func_(&frames_in_buffer, &offset_in_frames, &is_playing, &is_eos_reached, context_); if (is_playing && frames_in_buffer > 0 && playback_rate > 0.0) { + SB_DLOG(INFO) << "alsa::AlsaAudioSink exits idle loop : is playing " + << is_playing << " frames in buffer " << frames_in_buffer + << " playback_rate " << playback_rate; return true; } if (drain) { @@ -294,6 +298,8 @@ ScopedTryLock lock(mutex_); if (lock.is_locked()) { if (destroying_) { + SB_DLOG(INFO) + << "alsa::AlsaAudioSink exits playback loop : destroying"; break; } playback_rate = playback_rate_; @@ -302,6 +308,8 @@ if (delayed_frame < kMinimumFramesInALSA) { if (playback_rate == 0.0) { + SB_DLOG(INFO) + << "alsa::AlsaAudioSink exits playback loop: playback rate 0"; return true; } int frames_in_buffer, offset_in_frames; @@ -309,6 +317,8 @@ update_source_status_func_(&frames_in_buffer, &offset_in_frames, &is_playing, &is_eos_reached, context_); if (!is_playing || frames_in_buffer == 0) { + SB_DLOG(INFO) << "alsa::AlsaAudioSink exits playback loop: is playing " + << is_playing << " frames in buffer " << frames_in_buffer; return true; } WriteFrames(playback_rate, std::min(kFramesPerRequest, frames_in_buffer), @@ -338,6 +348,9 @@ frames_to_buffer_end); consume_frame_func_(consumed, context_); if (consumed != frames_to_buffer_end) { + SB_DLOG(INFO) << "alsa::AlsaAudioSink exits write frames : consumed " + << consumed << " frames, with " << frames_to_buffer_end + << " frames to buffer end"; return; }
diff --git a/src/starboard/shared/blittergles/blitter_create_default_device.cc b/src/starboard/shared/blittergles/blitter_create_default_device.cc index abec352..8435118 100644 --- a/src/starboard/shared/blittergles/blitter_create_default_device.cc +++ b/src/starboard/shared/blittergles/blitter_create_default_device.cc
@@ -115,16 +115,7 @@ return kSbBlitterInvalidDevice; } - // When running on Xvfb, sometimes ANGLE fails to open the default X display. - // By retrying, we increase the chances that eglInitialize() will succeed. - // This is a temporary fix. - int max_tries = 3, num_tries = 0; - bool initialized = false; - do { - initialized = eglInitialize(device->display, NULL, NULL); - ++num_tries; - } while (!initialized && num_tries < max_tries); - if (!initialized) { + if (!eglInitialize(device->display, NULL, NULL)) { SB_DLOG(ERROR) << ": Failed to initialize device."; return kSbBlitterInvalidDevice; }
diff --git a/src/starboard/shared/iso/impl/directory_get_next.h b/src/starboard/shared/iso/impl/directory_get_next.h index 488249f..1bb4a1d 100644 --- a/src/starboard/shared/iso/impl/directory_get_next.h +++ b/src/starboard/shared/iso/impl/directory_get_next.h
@@ -36,12 +36,23 @@ return false; } + // Look for the first directory that isn't current or parent. struct dirent dirent_buffer; struct dirent* dirent; - int result = readdir_r(directory->directory, &dirent_buffer, &dirent); - if (result || !dirent) { - return false; - } + int result; + do { + result = readdir_r(directory->directory, &dirent_buffer, &dirent); + if (!result && dirent) { + if ((SbStringCompareAll(dirent->d_name, ".") == 0) || + (SbStringCompareAll(dirent->d_name, "..") == 0)) { + continue; + } else { + break; + } + } else { + return false; + } + } while (true); SbStringCopy(out_entry->name, dirent->d_name, SB_ARRAY_SIZE_INT(out_entry->name));
diff --git a/src/starboard/shared/linux/cpu_features_get.cc b/src/starboard/shared/linux/cpu_features_get.cc index d8ce245..2eeedf1 100644 --- a/src/starboard/shared/linux/cpu_features_get.cc +++ b/src/starboard/shared/linux/cpu_features_get.cc
@@ -12,6 +12,21 @@ // See the License for the specific language governing permissions and // limitations under the License. +// This file contains implementations of SbCPUFeaturesGet() on all supported +// architectures defined in Starboard header cpu_features.h on linux platform. +// We use the most applicable and precise approach to get CPU features on each +// architecture. To be specific, +// +// On Arm/Arm64, we read CPU version information from /proc/cpuinfo. We get +// feature flags by parsing HWCAP bitmasks retrieved from function getauxval() +// or /proc/self/auxv, or by reading the flags from /proc/cpuinfo. +// +// On X86/X86_64, we read CPU version strings from /proc/cpuinfo. We get other +// CPU version information and feature flags by CPUID instruction, which gives +// more precise and complete information than reading from /proc/cpuinfo. +// +// TODO: Mips/Mips64 and Ppc/Ppc64 + #include "starboard/cpu_features.h" #include <dlfcn.h> // dlsym, dlclose, dlopen @@ -19,7 +34,7 @@ #include <stdio.h> // fopen, fclose #include <string.h> #include <strings.h> // strcasecmp -#include <sys/auxv.h> +#include <sys/auxv.h> // getauxval() #include <unistd.h> // sysconf() #include <memory> @@ -32,7 +47,10 @@ namespace { -// See <asm/hwcap.h> kernel header. +#if SB_IS(ARCH_ARM) + +#if SB_IS(32_BIT) +// See <arch/arm/include/uapi/asm/hwcap.h> kernel header. #define HWCAP_VFP (1 << 6) #define HWCAP_IWMMXT (1 << 9) #define HWCAP_NEON (1 << 12) @@ -44,7 +62,6 @@ #define HWCAP_VFPD32 (1 << 19) /* set if VFP has 32 regs (not 16) */ #define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT) -// see <uapi/asm/hwcap.h> kernel header #define HWCAP2_AES (1 << 0) #define HWCAP2_PMULL (1 << 1) #define HWCAP2_SHA1 (1 << 2) @@ -55,39 +72,54 @@ #define HWCAP_SET_FOR_ARMV8 \ (HWCAP_VFP | HWCAP_NEON | HWCAP_VFPv3 | HWCAP_VFPv4 | HWCAP_IDIV) +#elif SB_IS(64_BIT) +// See <arch/arm64/include/uapi/asm/hwcap.h> kernel header +#define HWCAP_FP (1 << 0) +#define HWCAP_ASIMD (1 << 1) +#define HWCAP_AES (1 << 3) +#define HWCAP_PMULL (1 << 4) +#define HWCAP_SHA1 (1 << 5) +#define HWCAP_SHA2 (1 << 6) +#define HWCAP_CRC32 (1 << 7) + +#endif // SB_IS(32_BIT) + +#elif SB_IS(ARCH_X86) + +// x86_xgetbv returns the value of an Intel Extended Control Register (XCR). +// Currently only XCR0 is defined by Intel so |xcr| should always be zero. +uint64_t x86_xgetbv(uint32_t xcr) { + uint32_t eax, edx; + + __asm__ volatile("xgetbv" : "=a"(eax), "=d"(edx) : "c"(xcr)); + return (static_cast<uint64_t>(edx) << 32) | eax; +} + +#if SB_IS(32_BIT) +void x86_cpuid(int cpuid_info[4], int info_type) { + __asm__ volatile( + "mov %%ebx, %%edi\n" + "cpuid\n" + "xchg %%edi, %%ebx\n" + : "=a"(cpuid_info[0]), "=D"(cpuid_info[1]), "=c"(cpuid_info[2]), + "=d"(cpuid_info[3]) + : "a"(info_type), "c"(0)); +} +#elif SB_IS(64_BIT) +void x86_cpuid(int cpuid_info[4], int info_type) { + __asm__ volatile("cpuid\n" + : "=a"(cpuid_info[0]), "=b"(cpuid_info[1]), + "=c"(cpuid_info[2]), "=d"(cpuid_info[3]) + : "a"(info_type), "c"(0)); +} +#endif // SB_IS(32_BIT) + +#endif // SB_IS(ARCH_ARM) + using starboard::shared::SetX86FeaturesInvalid; using starboard::shared::SetArmFeaturesInvalid; using starboard::shared::SetGeneralFeaturesInvalid; -// Checks if a space-separated list of items |list|, in the form of a string, -// contains one given item |item|. -bool HasItemInList(const char* list, const char* flag) { - ssize_t flag_length = strlen(flag); - const char* list_ptr = list; - if (list_ptr == nullptr) { - return false; - } - while (*list_ptr != '\0') { - // Skip whitespace. - while (isspace(*list_ptr)) - ++list_ptr; - - // Find end of current list flag. - const char* end_ptr = list_ptr; - while (*end_ptr != '\0' && !isspace(*end_ptr)) - ++end_ptr; - - if (flag_length == end_ptr - list_ptr && - memcmp(list_ptr, flag, flag_length) == 0) { - return true; - } - - // Continue to the next flag. - list_ptr = end_ptr; - } - return false; -} - // Class that holds the information in system file /proc/cpuinfo. class ProcCpuInfo { // Raw data of the file /proc/cpuinfo @@ -304,6 +336,36 @@ return hwcap; } +#if SB_IS(ARCH_ARM) +// Checks if a space-separated list of items |list|, in the form of a string, +// contains one given item |item|. +bool HasItemInList(const char* list, const char* flag) { + ssize_t flag_length = strlen(flag); + const char* list_ptr = list; + if (list_ptr == nullptr) { + return false; + } + while (*list_ptr != '\0') { + // Skip whitespace. + while (isspace(*list_ptr)) + ++list_ptr; + + // Find end of current list flag. + const char* end_ptr = list_ptr; + while (*end_ptr != '\0' && !isspace(*end_ptr)) + ++end_ptr; + + if (flag_length == end_ptr - list_ptr && + memcmp(list_ptr, flag, flag_length) == 0) { + return true; + } + + // Continue to the next flag. + list_ptr = end_ptr; + } + return false; +} + // Construct hwcap bitmask by the feature flags in /proc/cpuinfo uint32_t ConstructHwcapFromCPUInfo(ProcCpuInfo* cpu_info, int16_t architecture_generation, @@ -352,8 +414,13 @@ bool SbCPUFeaturesGet_ARM(SbCPUFeatures* features) { memset(features, 0, sizeof(*features)); - // Raspi is a 32-bit ARM platform. +#if SB_IS(32_BIT) features->architecture = kSbCPUFeaturesArchitectureArm; +#elif SB_IS(64_BIT) + features->architecture = kSbCPUFeaturesArchitectureArm64; +#else +#error "Your platform must be either 32-bit or 64-bit." +#endif // Set the default value of the features to be invalid, then fill them in // if appropriate. @@ -399,7 +466,11 @@ // ARMv7-based CPU, and "(v6l)" for an ARMv6-one. For example, // the Raspberry Pi is one popular ARMv6 device that reports // architecture 7. The 'Processor' or 'model name' fields - // also contain processor brand information. + // also contain processor brand information. "model name" is used in + // Linux 3.8 and later (3.7 + // and later for arm64) and is shown once per CPU. "Processor" is used in + // earler versions and is shown only once at the top of /proc/cpuinfo + // regardless of the number CPUs. // Allocate 256 bytes for "Processor"/"model name" field. static char brand_buffer[256] = {0}; @@ -418,6 +489,7 @@ } } +#if SB_IS(32_BIT) // Get hwcap bitmask and extract the CPU feature flags from it. features->hwcap = ReadElfHwcaps(AT_HWCAP); if (features->hwcap == 0) { @@ -481,10 +553,22 @@ features->arm.has_aes = (features->hwcap2 & HWCAP2_AES) != 0; features->arm.has_pmull = (features->hwcap2 & HWCAP2_PMULL) != 0; - features->arm.has_sha1 = (features->hwcap2 & HWCAP2_PMULL) != 0; + features->arm.has_sha1 = (features->hwcap2 & HWCAP2_SHA1) != 0; features->arm.has_sha2 = (features->hwcap2 & HWCAP2_SHA2) != 0; features->arm.has_crc32 = (features->hwcap2 & HWCAP2_CRC32) != 0; +#elif SB_IS(64_BIT) + // Read hwcaps bitmask and extract the CPU feature flags from it. + features->hwcap = ReadElfHwcaps(AT_HWCAP); + + features->arm.has_aes = (features->hwcap & HWCAP_AES) != 0; + features->arm.has_pmull = (features->hwcap & HWCAP_PMULL) != 0; + features->arm.has_sha1 = (features->hwcap & HWCAP_SHA1) != 0; + features->arm.has_sha2 = (features->hwcap & HWCAP_SHA2) != 0; + features->arm.has_crc32 = (features->hwcap & HWCAP_CRC32) != 0; + +#endif // SB_IS(32_BIT) + // Get L1 ICACHE and DCACHE line size. features->icache_line_size = sysconf(_SC_LEVEL1_ICACHE_LINESIZE); features->dcache_line_size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); @@ -492,12 +576,158 @@ return true; } +#elif SB_IS(ARCH_X86) + +bool SbCPUFeaturesGet_X86(SbCPUFeatures* features) { + memset(features, 0, sizeof(*features)); + +#if SB_IS(32_BIT) + features->architecture = kSbCPUFeaturesArchitectureX86; +#elif SB_IS(64_BIT) + features->architecture = kSbCPUFeaturesArchitectureX86_64; +#else +#error "Your platform must be either 32-bit or 64-bit." +#endif + + // Set the default value of the features to be invalid, then fill them in + // if appropriate. + SetGeneralFeaturesInvalid(features); + SetArmFeaturesInvalid(features); + SetX86FeaturesInvalid(features); + + ProcCpuInfo cpu_info; + + // Extract brand and vendor information. + // Allocate 256 bytes for "model name" field. + static char brand_buffer[256] = {0}; + if (cpu_info.ExtractStringFeature( + "model name", brand_buffer, + sizeof(brand_buffer) / sizeof(brand_buffer[0]))) { + features->brand = brand_buffer; + } + + // Allocate 128 bytes for "vendor_id" field. + static char vendor_buffer[128] = {0}; + if (cpu_info.ExtractStringFeature( + "vendor_id", vendor_buffer, + sizeof(vendor_buffer) / sizeof(vendor_buffer[0]))) { + features->x86.vendor = vendor_buffer; + } + + // Get L1 ICACHE and DCACHE line size. + features->icache_line_size = sysconf(_SC_LEVEL1_ICACHE_LINESIZE); + features->dcache_line_size = sysconf(_SC_LEVEL1_DCACHE_LINESIZE); + + // Hwcap bitmasks are not applicable to x86/x86_64. They'll remain 0. + + // Use cpuid instruction to get feature flags. + int cpuid_info[4] = {0}; + + // x86_cpuid with an InfoType argument of 0 returns the number of + // valid Ids in cpuid_info[0]. + x86_cpuid(cpuid_info, 0); + unsigned int num_ids = cpuid_info[0]; + + // Interpret CPU feature information of CPUID level 1. EAX is returned + // in cpuid_info[0], EBX in cpuid_info[1], ECX in cpuid_info[2], + // EDX in cpuid_info[3]. + if (num_ids > 0) { + x86_cpuid(cpuid_info, 1); + features->x86.signature = cpuid_info[0]; + features->x86.stepping = cpuid_info[0] & 0xF; + features->x86.model = + ((cpuid_info[0] >> 4) & 0xF) + ((cpuid_info[0] >> 12) & 0xF0); + features->x86.family = (cpuid_info[0] >> 8) & 0xF; + features->x86.type = (cpuid_info[0] >> 12) & 0x3; + features->x86.ext_model = (cpuid_info[0] >> 16) & 0xF; + features->x86.ext_family = (cpuid_info[0] >> 20) & 0xFF; + + features->has_fpu = (cpuid_info[3] & (1 << 0)) != 0; + + features->x86.has_cmov = (cpuid_info[3] & (1 << 15)) != 0; + features->x86.has_mmx = (cpuid_info[3] & (1 << 23)) != 0; + features->x86.has_sse = (cpuid_info[3] & (1 << 25)) != 0; + features->x86.has_sse2 = (cpuid_info[3] & (1 < 26)) != 0; + features->x86.has_tsc = (cpuid_info[3] & (1 << 4)) != 0; + + features->x86.has_sse3 = (cpuid_info[2] & (1 << 0)) != 0; + features->x86.has_ssse3 = (cpuid_info[2] & (1 << 9)) != 0; + features->x86.has_sse41 = (cpuid_info[2] & (1 << 19)) != 0; + features->x86.has_sse42 = (cpuid_info[2] & (1 << 20)) != 0; + features->x86.has_movbe = (cpuid_info[2] & (1 << 22)) != 0; + features->x86.has_popcnt = (cpuid_info[2] & (1 << 23)) != 0; + features->x86.has_osxsave = (cpuid_info[2] & (1 << 27)) != 0; + features->x86.has_f16c = (cpuid_info[2] & (1 << 29)) != 0; + features->x86.has_fma3 = (cpuid_info[2] & (1 << 12)) != 0; + features->x86.has_aesni = (cpuid_info[2] & (1 << 25)) != 0; + + // AVX instructions will generate an illegal instruction exception unless + // a) they are supported by the CPU, + // b) XSAVE is supported by the CPU and + // c) XSAVE is enabled by the kernel. + // See http://software.intel.com/en-us/blogs/2011/04/14/is-avx-enabled + // + // In addition, we have observed some crashes with the xgetbv instruction + // even after following Intel's example code. (See crbug.com/375968.) + // Because of that, we also test the XSAVE bit because its description in + // the CPUID documentation suggests that it signals xgetbv support. + features->x86.has_avx = + (cpuid_info[2] & (1 << 28)) != 0 && + (cpuid_info[2] & (1 << 26)) != 0 /* XSAVE */ && + (cpuid_info[2] & (1 << 27)) != 0 /* OSXSAVE */ && + (x86_xgetbv(0) & 6) == 6 /* XSAVE enabled by kernel */; + } + + // Interpret CPU feature information of CPUID level 7. + if (num_ids >= 7) { + x86_cpuid(cpuid_info, 7); + features->x86.has_avx2 = + features->x86.has_avx && (cpuid_info[1] & (1 << 5)) != 0; + features->x86.has_avx512f = + features->x86.has_avx && (cpuid_info[1] & (1 << 16)) != 0; + features->x86.has_avx512dq = + features->x86.has_avx && (cpuid_info[1] & (1 << 17)) != 0; + features->x86.has_avx512ifma = + features->x86.has_avx && (cpuid_info[1] & (1 << 21)) != 0; + features->x86.has_avx512pf = + features->x86.has_avx && (cpuid_info[1] & (1 << 26)) != 0; + features->x86.has_avx512er = + features->x86.has_avx && (cpuid_info[1] & (1 << 27)) != 0; + features->x86.has_avx512cd = + features->x86.has_avx && (cpuid_info[1] & (1 << 28)) != 0; + features->x86.has_avx512bw = + features->x86.has_avx && (cpuid_info[1] & (1 << 30)) != 0; + features->x86.has_avx512vl = + features->x86.has_avx && (cpuid_info[1] & (1 << 31)) != 0; + features->x86.has_bmi1 = (cpuid_info[1] & (1 << 3)) != 0; + features->x86.has_bmi2 = (cpuid_info[1] & (1 << 8)) != 0; + } + + // Query extended IDs. + x86_cpuid(cpuid_info, 0x80000000); + unsigned int num_ext_ids = cpuid_info[0]; + + // Interpret extended CPU feature information. + if (num_ext_ids > 0x80000000) { + // Interpret CPU feature information of CPUID level 0x80000001. + x86_cpuid(cpuid_info, 0x80000001); + features->x86.has_lzcnt = (cpuid_info[2] & (1 << 5)) != 0; + // SAHF must be probed in long mode. + features->x86.has_sahf = (cpuid_info[2] & (1 << 0)) != 0; + } + + return true; +} +#endif + } // namespace -// TODO: Only ARM is currently implemented and tested +// TODO: Only ARM/ARM64 and X86/X86_64 are currently implemented and tested bool SbCPUFeaturesGet(SbCPUFeatures* features) { #if SB_IS(ARCH_ARM) return SbCPUFeaturesGet_ARM(features); +#elif SB_IS(ARCH_X86) + return SbCPUFeaturesGet_X86(features); #else SB_NOTIMPLEMENTED();
diff --git a/src/starboard/shared/linux/dev_input/dev_input.cc b/src/starboard/shared/linux/dev_input/dev_input.cc index b051f00..4e76bb4 100644 --- a/src/starboard/shared/linux/dev_input/dev_input.cc +++ b/src/starboard/shared/linux/dev_input/dev_input.cc
@@ -21,12 +21,15 @@ #include <string.h> #include <sys/time.h> #include <unistd.h> +#include <unordered_map> #include <vector> #include <algorithm> #include <cmath> #include <map> +#include <memory> #include <string> +#include <vector> #include "starboard/common/log.h" #include "starboard/common/string.h" @@ -35,6 +38,7 @@ #include "starboard/input.h" #include "starboard/key.h" #include "starboard/memory.h" +#include "starboard/once.h" #include "starboard/shared/posix/handle_eintr.h" #include "starboard/shared/posix/time_internal.h" @@ -60,15 +64,149 @@ kTouchPadPositionAll = kTouchPadPositionX | kTouchPadPositionY }; +class ControllerTuning { + public: + ~ControllerTuning() {} + + uint16_t GetKeyCode(uint16_t from); + void MapKeyCode(uint16_t from, uint16_t to) { key_map_[from] = to; } + + float GetMinimumFlat() { return minimum_flat_; } + void SetMinimumFlat(float value) { minimum_flat_ = value; } + + protected: + // Only create this object from DeviceMap::CreateControllerTuning() + ControllerTuning() {} + + private: + std::unordered_map<int, int> key_map_; + float minimum_flat_ = 0; + + friend class DeviceMap; +}; + +uint16_t ControllerTuning::GetKeyCode(uint16_t from) { + auto mapped_code = key_map_.find(from); + if (mapped_code != key_map_.end()) { + return mapped_code->second; + } + return from; +} + +class DeviceMap { + public: + DeviceMap(); + ~DeviceMap() = delete; + + // Gets the singleton instance of the default DeviceMap. This + // is created the first time it is used. + static DeviceMap* Get(); + + // Return the controller tuning object for a given device. Return null if none + // is registered. + ControllerTuning* GetControllerTuning(const std::string& device) const; + + private: + // Create a controllertuning object. + ControllerTuning* CreateControllerTuning(); + + // Register a controller tuning object for a given device. + void RegisterControllerTuning(const std::string& device, + ControllerTuning* tuning); + + std::unordered_map<std::string, ControllerTuning*> device_map_; + + // Registry for all known controller tunings. + std::vector<std::unique_ptr<ControllerTuning>> controller_tunings_; +}; + +DeviceMap::DeviceMap() { + // Add key mappings for the Xbox controllers. + ControllerTuning* xbox_one_controller = CreateControllerTuning(); + RegisterControllerTuning("Microsoft X-Box One S pad", xbox_one_controller); + RegisterControllerTuning("Microsoft X-Box One pad", xbox_one_controller); + RegisterControllerTuning("Microsoft X-Box 360 pad", xbox_one_controller); + xbox_one_controller->SetMinimumFlat(0.125); + xbox_one_controller->MapKeyCode(BTN_NORTH, BTN_WEST); // Map for 'X' + xbox_one_controller->MapKeyCode(BTN_WEST, BTN_NORTH); // Map for 'Y' + xbox_one_controller->MapKeyCode(BTN_TL, BTN_TL2); // Map for left bumper. + xbox_one_controller->MapKeyCode(BTN_TR, BTN_TR2); // Map for right bumper. + + // Add key mappings for the PlayStation 4 controller. + ControllerTuning* ps4_controller = CreateControllerTuning(); + RegisterControllerTuning("Sony Interactive Entertainment Wireless Controller", + ps4_controller); + RegisterControllerTuning("Sony Computer Entertainment Wireless Controller", + ps4_controller); + RegisterControllerTuning("Sony PLAYSTATION(R)3 Controller", ps4_controller); + + ps4_controller->MapKeyCode(BTN_TL2, BTN_TL); // Map for left trigger. + ps4_controller->MapKeyCode(BTN_TR2, BTN_TR); // Map for right trigger. + ps4_controller->MapKeyCode(BTN_TL, BTN_TL2); // Map for left bumper. + ps4_controller->MapKeyCode(BTN_TR, BTN_TR2); // Map for right bumper. + + // Add key mappings for the Horipad Switch wired controller. + ControllerTuning* switch_controller = CreateControllerTuning(); + RegisterControllerTuning("HORI CO.,LTD. HORIPAD S", switch_controller); + + switch_controller->MapKeyCode(BTN_C, BTN_SOUTH); // Map for 'A'. + switch_controller->MapKeyCode(BTN_A, BTN_NORTH); // Map for 'Y'. + switch_controller->MapKeyCode(BTN_NORTH, BTN_WEST); // Map for 'X'. + switch_controller->MapKeyCode(BTN_WEST, BTN_TL2); // Map for left bumper. + switch_controller->MapKeyCode(BTN_Z, BTN_TR2); // Map for right bumper. + + switch_controller->MapKeyCode(BTN_THUMBL, BTN_SELECT); // Map for 'capture'. + switch_controller->MapKeyCode(BTN_MODE, KEY_HOME); // Map for 'home'. + + switch_controller->MapKeyCode(BTN_TL2, KEY_KPMINUS); // Map for '-'. + switch_controller->MapKeyCode(BTN_TR2, KEY_KPPLUS); // Map for '+'. + + switch_controller->MapKeyCode(BTN_SELECT, BTN_THUMBL); // Map for left hat. + switch_controller->MapKeyCode(BTN_START, BTN_THUMBR); // Map for right hat. +} + +void DeviceMap::RegisterControllerTuning(const std::string& device, + ControllerTuning* tuning) { + SB_DCHECK(GetControllerTuning(device) == NULL || + GetControllerTuning(device) == tuning); + device_map_[device] = tuning; +} + +ControllerTuning* DeviceMap::CreateControllerTuning() { + ControllerTuning* tuning = new ControllerTuning(); + controller_tunings_.emplace_back(tuning); + return tuning; +} + +ControllerTuning* DeviceMap::GetControllerTuning( + const std::string& device) const { + auto mapped_device = device_map_.find(device); + if (mapped_device != device_map_.end()) { + return mapped_device->second; + } + return NULL; +} + +SB_ONCE_INITIALIZE_FUNCTION(DeviceMap, GetDeviceMap); + +DeviceMap* DeviceMap::Get() { + DeviceMap* device_map = GetDeviceMap(); + return device_map; +} + struct InputDeviceInfo { InputDeviceInfo() : fd(-1), touchpad_position_state(kTouchPadPositionNone) {} + // Device Name + std::string name; + // File descriptor open for the device FileDescriptor fd; // Absolute Axis info. std::map<int, struct input_absinfo> axis_info; std::map<int, float> axis_value; int touchpad_position_state; + ControllerTuning* tuning; }; bool IsTouchpadPositionKnown(InputDeviceInfo* device_info) { @@ -92,21 +230,22 @@ // Converts an input_event into a kSbEventInput Application::Event. The caller // is responsible for deleting the returned event. Event* InputToApplicationEvent(const struct input_event& event, - InputDeviceInfo* device_info, - int modifiers); + int modifiers, + InputDeviceInfo* device_info); // Converts an input_event containing a key input into a kSbEventInput // Application::Event. The caller is responsible for deleting the returned // event. Event* KeyInputToApplicationEvent(const struct input_event& event, - int modifiers); + int modifiers, + InputDeviceInfo* device_info); // Converts an input_event containing an axis event into a kSbEventInput // Application::Event. The caller is responsible for deleting the returned // event. Event* AxisInputToApplicationEvent(const struct input_event& event, - InputDeviceInfo* device_info, - int modifiers); + int modifiers, + InputDeviceInfo* device_info); // The window to attribute /dev/input events to. SbWindow window_; @@ -432,34 +571,28 @@ return kSbKeyGamepadDPadLeft; case BTN_DPAD_RIGHT: return kSbKeyGamepadDPadRight; - // The mapping for the buttons below can vary from controller to controller. - // TODO: Include button mapping for controllers with different layout. - case BTN_B: - return kSbKeyGamepad1; - case BTN_C: - return kSbKeyGamepad2; - case BTN_A: - return kSbKeyGamepad3; - case BTN_X: - return kSbKeyGamepad4; - case BTN_Y: - return kSbKeyGamepadLeftBumper; - case BTN_Z: - return kSbKeyGamepadRightBumper; case BTN_TL2: - return kSbKeyGamepad5; + return kSbKeyGamepadLeftBumper; case BTN_TR2: - return kSbKeyGamepad6; + return kSbKeyGamepadRightBumper; + case BTN_SOUTH: + return kSbKeyGamepad1; + case BTN_EAST: + return kSbKeyGamepad2; + case BTN_WEST: + return kSbKeyGamepad3; + case BTN_NORTH: + return kSbKeyGamepad4; case BTN_SELECT: - return kSbKeyGamepadLeftStick; + return kSbKeyGamepad5; case BTN_START: - return kSbKeyGamepadRightStick; + return kSbKeyGamepad6; case BTN_MODE: return kSbKeyGamepadSystem; case BTN_THUMBL: - return kSbKeyGamepad1; + return kSbKeyGamepadLeftStick; case BTN_THUMBR: - return kSbKeyGamepad1; + return kSbKeyGamepadRightStick; } SB_DLOG(WARNING) << "Unknown code: 0x" << std::hex << code; return kSbKeyUnknown; @@ -494,19 +627,26 @@ return !!(bitset.at(bit / 8) & (1 << (bit % 8))); } -bool IsAxisFlat(float median, const struct input_absinfo& axis_info) { +bool IsAxisFlat(int minimum_flat, + float rest_value, + const struct input_absinfo& axis_info) { SB_DCHECK((axis_info.flat * 2) <= (axis_info.maximum - axis_info.minimum)); - return (axis_info.flat != 0) && (axis_info.value > median - axis_info.flat) && - (axis_info.value < median + axis_info.flat); + int flat = std::max(minimum_flat, axis_info.flat); + return (flat != 0) && (axis_info.value > rest_value - flat) && + (axis_info.value < rest_value + flat); } -float GetAxisValue(const struct input_absinfo& axis_info) { +float GetAxisValue(bool is_trigger, + float minimum_flat, + const struct input_absinfo& axis_info) { float median = static_cast<float>(axis_info.maximum + axis_info.minimum) / 2.0f; - if (IsAxisFlat(median, axis_info)) - return 0; float range = static_cast<float>(axis_info.maximum - axis_info.minimum); float radius = range / 2.0f; + if (IsAxisFlat(minimum_flat * radius, is_trigger ? axis_info.minimum : median, + axis_info)) { + return is_trigger ? -1 : 0; + } // Scale the axis value to [-1, 1]. float axis_value = (static_cast<float>(axis_info.value) - median) / radius; @@ -532,11 +672,22 @@ return; } info->axis_info.insert(std::make_pair(axis, axis_info)); - info->axis_value.insert(std::make_pair(axis, GetAxisValue(axis_info))); + bool is_trigger = axis == ABS_Z || axis == ABS_RZ; + info->axis_value.insert(std::make_pair( + axis, + GetAxisValue(is_trigger, info->tuning->GetMinimumFlat(), axis_info))); } } void GetInputDeviceInfo(InputDeviceInfo* info) { + char device_name[1024]; + if (ioctl(info->fd, EVIOCGNAME(sizeof(device_name)), device_name) >= 0) { + size_t length = strnlen(device_name, sizeof(device_name)); + info->name.assign(device_name, length); + } + + info->tuning = DeviceMap::Get()->GetControllerTuning(info->name); + std::vector<uint8_t> axis_bits(BytesNeededForBitSet(KEY_MAX)); int result = ioctl(info->fd, EVIOCGBIT(EV_ABS, axis_bits.size()), axis_bits.data()); @@ -811,7 +962,7 @@ continue; } - return InputToApplicationEvent(event, &device, modifiers); + return InputToApplicationEvent(event, modifiers, &device); } return NULL; } @@ -968,8 +1119,8 @@ DevInput::Event* DevInputImpl::AxisInputToApplicationEvent( const struct input_event& event, - InputDeviceInfo* device_info, - int modifiers) { + int modifiers, + InputDeviceInfo* device_info) { SB_DCHECK(event.type == EV_ABS); SbKey key = kSbKeyUnknown; float axis_value = 0; @@ -978,7 +1129,9 @@ if (axis_info_it != device_info->axis_info.end()) { struct input_absinfo& axis_info = axis_info_it->second; axis_info.value = event.value; - axis_value = GetAxisValue(axis_info); + bool is_trigger = event.code == ABS_Z || event.code == ABS_RZ; + axis_value = GetAxisValue(is_trigger, device_info->tuning->GetMinimumFlat(), + axis_info); float& stored_axis_value = device_info->axis_value[event.code]; previous_axis_value = stored_axis_value; if (previous_axis_value == axis_value) { @@ -1009,21 +1162,21 @@ return CreateMoveEventWithKey(window_, key, location, modifiers, input_vector); } - case ABS_Z: + case ABS_RX: input_vector.x = axis_value; input_vector.y = device_info->axis_value[ABS_RZ]; key = kSbKeyGamepadRightStickLeft; location = kSbKeyLocationRight; return CreateMoveEventWithKey(window_, key, location, modifiers, input_vector); - case ABS_RZ: + case ABS_RY: input_vector.x = device_info->axis_value[ABS_Z]; input_vector.y = axis_value; key = kSbKeyGamepadRightStickUp; location = kSbKeyLocationRight; return CreateMoveEventWithKey(window_, key, location, modifiers, input_vector); - case ABS_RX: { + case ABS_Z: { key = kSbKeyGamepadLeftTrigger; location = kSbKeyLocationLeft; // For trigger buttons, the range is [0..1]. @@ -1033,7 +1186,7 @@ previous_trigger_value, key, location, modifiers, event); } - case ABS_RY: { + case ABS_RZ: { key = kSbKeyGamepadRightTrigger; location = kSbKeyLocationRight; // For trigger buttons, the range is [0..1]. @@ -1120,9 +1273,18 @@ DevInput::Event* DevInputImpl::KeyInputToApplicationEvent( const struct input_event& event, - int modifiers) { + int modifiers, + InputDeviceInfo* device_info) { SB_DCHECK(event.type == EV_KEY); SB_DCHECK(event.value <= 2); + + SbKey key = KeyCodeToSbKey(device_info->tuning + ? device_info->tuning->GetKeyCode(event.code) + : event.code); + if (key == kSbKeyUnknown) { + return NULL; + } + SbInputData* data = new SbInputData(); SbMemorySet(data, 0, sizeof(*data)); #if SB_API_VERSION >= 10 @@ -1133,7 +1295,7 @@ (event.value == 0 ? kSbInputEventTypeUnpress : kSbInputEventTypePress); data->device_type = kSbInputDeviceTypeKeyboard; data->device_id = kKeyboardDeviceId; - data->key = KeyCodeToSbKey(event.code); + data->key = key; data->key_location = KeyCodeToSbKeyLocation(event.code); data->key_modifiers = modifiers; return new Event(kSbEventTypeInput, data, @@ -1142,15 +1304,15 @@ DevInput::Event* DevInputImpl::InputToApplicationEvent( const struct input_event& event, - InputDeviceInfo* device_info, - int modifiers) { + int modifiers, + InputDeviceInfo* device_info) { // EV_ABS events are axis values: Sticks, dpad, and touchpad. // https://www.kernel.org/doc/Documentation/input/event-codes.txt switch (event.type) { case EV_ABS: - return AxisInputToApplicationEvent(event, device_info, modifiers); + return AxisInputToApplicationEvent(event, modifiers, device_info); case EV_KEY: - return KeyInputToApplicationEvent(event, modifiers); + return KeyInputToApplicationEvent(event, modifiers, device_info); } return NULL; }
diff --git a/src/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc b/src/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc new file mode 100644 index 0000000..6bbaf73 --- /dev/null +++ b/src/starboard/shared/starboard/audio_sink/audio_sink_get_min_buffer_size_in_frames.cc
@@ -0,0 +1,37 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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 "starboard/audio_sink.h" + +#include "starboard/common/log.h" + +int SbAudioSinkGetMinBufferSizeInFrames(int channels, + SbMediaAudioSampleType sample_type, + int sampling_frequency_hz) { + if (channels <= 0 || channels > SbAudioSinkGetMaxChannels()) { + SB_LOG(ERROR) << "Not support channels count " << channels; + return -1; + } + if (sample_type != kSbMediaAudioSampleTypeInt16Deprecated && + sample_type != kSbMediaAudioSampleTypeFloat32) { + SB_LOG(ERROR) << "Not support sample type " << sample_type; + return -1; + } + if (sampling_frequency_hz <= 0) { + SB_LOG(ERROR) << "Not support sample frequency " << sampling_frequency_hz; + return -1; + } + + return 8 * 1024; +}
diff --git a/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc b/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc index 9772e30..e137651 100644 --- a/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc +++ b/src/starboard/shared/starboard/media/media_is_audio_supported_aac_and_opus.cc
@@ -23,11 +23,9 @@ return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND; } -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) if (audio_codec == kSbMediaAudioCodecOpus) { return bitrate <= SB_MEDIA_MAX_AUDIO_BITRATE_IN_BITS_PER_SECOND; } -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) return false; }
diff --git a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc index 996f9aa..8d4695e 100644 --- a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc +++ b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.cc
@@ -80,6 +80,10 @@ process_audio_data_job_( std::bind(&AudioRenderer::ProcessAudioData, this)), audio_renderer_sink_(audio_renderer_sink.Pass()) { + SB_DLOG(INFO) << "Creating AudioRenderer with " << channels_ << " channels, " + << bytes_per_frame_ << " bytes per frame, " + << max_cached_frames_ << " max cached frames, and " + << max_frames_per_append_ << " max frames per append."; SB_DCHECK(decoder_ != NULL); SB_DCHECK(max_frames_per_append_ > 0); SB_DCHECK(max_cached_frames_ >= max_frames_per_append_ * 2); @@ -93,6 +97,10 @@ } AudioRenderer::~AudioRenderer() { + SB_DLOG(INFO) << "Destroying AudioRenderer with " << channels_ + << " channels, " << bytes_per_frame_ << " bytes per frame, " + << max_cached_frames_ << " max cached frames, and " + << max_frames_per_append_ << " max frames per append."; SB_DCHECK(BelongsToCurrentThread()); } @@ -470,7 +478,8 @@ total_frames_consumed_by_sink_ - silence_frames_consumed_on_sink_thread_); underflow_ |= frames_in_buffer_on_sink_thread_ < kFramesInBufferBeginUnderflow; - if (is_eos_reached_on_sink_thread_) { + if (is_eos_reached_on_sink_thread_ || + frames_in_buffer_on_sink_thread_ >= buffered_frames_to_start_) { underflow_ = false; } is_playing_on_sink_thread_ = !paused_ && !seeking_ && !underflow_; @@ -494,6 +503,9 @@ time_stretcher_.Initialize(sink_sample_type_, channels_, destination_sample_rate); + // Start play after have enough buffered frames to play 0.2s. + buffered_frames_to_start_ = destination_sample_rate * 0.2; + SbMediaAudioSampleType source_sample_type = decoder_->GetSampleType(); SbMediaAudioFrameStorageType source_storage_type = decoder_->GetStorageType(); @@ -656,7 +668,6 @@ seeking_ = false; Schedule(prerolled_cb_); } - underflow_ = false; } if (seeking_ || playback_rate_ == 0.0) {
diff --git a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h index ef27230..43be250 100644 --- a/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h +++ b/src/starboard/shared/starboard/player/filter/audio_renderer_internal.h
@@ -104,6 +104,9 @@ const int max_cached_frames_; const int max_frames_per_append_; + // |buffered_frames_to_start_| would be initialized in OnFirstOutput(). + // Before it's initialized, set it to a large number. + int buffered_frames_to_start_ = 48 * 1024; ErrorCB error_cb_; PrerolledCB prerolled_cb_;
diff --git a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc index 1f2d675..6f5593e 100644 --- a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc +++ b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.cc
@@ -65,7 +65,6 @@ if (audio_codec != kSbMediaAudioCodecNone) { audio_sample_info_ = *audio_sample_info; -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) if (audio_sample_info_.audio_specific_config_size > 0) { audio_specific_config_.reset( new int8_t[audio_sample_info_.audio_specific_config_size]); @@ -74,7 +73,6 @@ audio_sample_info->audio_specific_config_size); audio_sample_info_.audio_specific_config = audio_specific_config_.get(); } -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) } update_job_ = std::bind(&FilterBasedPlayerWorkerHandler::Update, this);
diff --git a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h index 3328ce6..e8c4d69 100644 --- a/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h +++ b/src/starboard/shared/starboard/player/filter/filter_based_player_worker_handler.h
@@ -88,11 +88,9 @@ SbMediaVideoCodec video_codec_; SbMediaAudioCodec audio_codec_; SbDrmSystem drm_system_; -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) // Store a copy of |SbMediaAudioSampleInfo::audio_specific_config| passed to // the ctor so it is valid for the life time of the player worker. scoped_array<int8_t> audio_specific_config_; -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) SbMediaAudioSampleInfo audio_sample_info_; // |media_time_provider_impl_| is used to provide the media playback time when
diff --git a/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc b/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc index 9b8e5ce..737c399 100644 --- a/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc +++ b/src/starboard/shared/starboard/player/filter/testing/audio_decoder_test.cc
@@ -16,6 +16,7 @@ #include <deque> #include <functional> +#include <map> #include "starboard/common/condition_variable.h" #include "starboard/common/mutex.h" @@ -147,7 +148,6 @@ SbThreadSleep(kSbTimeMillisecond); } *event = kError; - FAIL(); } // TODO: Add test to ensure that |consumed_cb| is not reused by the decoder. @@ -165,8 +165,6 @@ last_input_buffer_ = GetAudioInputBuffer(index); - outstanding_inputs_.insert(last_input_buffer_->timestamp()); - audio_decoder_->Decode(last_input_buffer_, consumed_cb()); } @@ -190,10 +188,15 @@ } void WriteMultipleInputs(size_t start_index, - size_t number_of_inputs_to_write) { + size_t number_of_inputs_to_write, + bool* error_occurred = NULL) { ASSERT_LE(start_index + number_of_inputs_to_write, dmp_reader_.number_of_audio_buffers()); + if (error_occurred) { + *error_occurred = false; + } + ASSERT_NO_FATAL_FAILURE(WriteSingleInput(start_index)); ++start_index; --number_of_inputs_to_write; @@ -207,6 +210,11 @@ --number_of_inputs_to_write; continue; } + if (event == kError) { + ASSERT_TRUE(error_occurred); + *error_occurred = true; + return; + } ASSERT_EQ(kOutput, event); scoped_refptr<DecodedAudio> decoded_audio; ASSERT_NO_FATAL_FAILURE(ReadFromDecoder(&decoded_audio)); @@ -281,7 +289,6 @@ can_accept_more_input_ = true; last_input_buffer_ = NULL; last_decoded_audio_ = NULL; - outstanding_inputs_.clear(); eos_written_ = false; } @@ -304,14 +311,27 @@ auto player_sample_info = dmp_reader_.GetPlayerSampleInfo(kSbMediaTypeAudio, index); #if SB_API_VERSION >= 11 - return new InputBuffer(DeallocateSampleFunc, NULL, NULL, - player_sample_info); + auto input_buffer = + new InputBuffer(DeallocateSampleFunc, NULL, NULL, player_sample_info); #else // SB_API_VERSION >= 11 SbMediaAudioSampleInfo audio_sample_info = dmp_reader_.GetAudioSampleInfo(index); - return new InputBuffer(kSbMediaTypeAudio, DeallocateSampleFunc, NULL, NULL, - player_sample_info, &audio_sample_info); + auto input_buffer = + new InputBuffer(kSbMediaTypeAudio, DeallocateSampleFunc, NULL, NULL, + player_sample_info, &audio_sample_info); #endif // SB_API_VERSION >= 11 + auto iter = invalid_inputs_.find(index); + if (iter != invalid_inputs_.end()) { + std::vector<uint8_t> content(input_buffer->size(), iter->second); + // Replace the content with invalid data. + input_buffer->SetDecryptedContent(content.data(), + static_cast<int>(content.size())); + } + return input_buffer; + } + + void UseInvalidDataForInput(size_t index, uint8_t byte_to_fill) { + invalid_inputs_[index] = byte_to_fill; } void WriteEndOfStream() { @@ -355,11 +375,9 @@ scoped_refptr<InputBuffer> last_input_buffer_; scoped_refptr<DecodedAudio> last_decoded_audio_; - // List of timestamps of InputBuffers provided to the Decoder so far, sorted - // in ascending order. - std::set<SbTime> outstanding_inputs_; - bool eos_written_ = false; + + std::map<size_t, uint8_t> invalid_inputs_; }; TEST_P(AudioDecoderTest, ThreeMoreDecoders) { @@ -414,24 +432,48 @@ } TEST_P(AudioDecoderTest, SingleInvalidInput) { - can_accept_more_input_ = false; - last_input_buffer_ = GetAudioInputBuffer(0); - std::vector<uint8_t> content(last_input_buffer_->size(), 0xab); - // Replace the content with invalid data. - last_input_buffer_->SetDecryptedContent(content.data(), - static_cast<int>(content.size())); - audio_decoder_->Decode(last_input_buffer_, consumed_cb()); + UseInvalidDataForInput(0, 0xab); + WriteSingleInput(0); WriteEndOfStream(); - bool error_occurred = false; + bool error_occurred = true; ASSERT_NO_FATAL_FAILURE(DrainOutputs(&error_occurred)); - // The decoder is allowed to either signal an error or return dummy audio - // data but not both. - if (error_occurred) { - ASSERT_FALSE(last_decoded_audio_); - } else { - ASSERT_TRUE(last_decoded_audio_); +} + +TEST_P(AudioDecoderTest, MultipleValidInputsAfterInvalidInput) { + const size_t kMaxNumberOfInputToWrite = 10; + const size_t number_of_input_to_write = + std::min(kMaxNumberOfInputToWrite, dmp_reader_.number_of_audio_buffers()); + + UseInvalidDataForInput(0, 0xab); + + bool error_occurred = true; + // Write first few frames. The first one is invalid and the rest are valid. + WriteMultipleInputs(0, number_of_input_to_write, &error_occurred); + + if (!error_occurred) { + WriteEndOfStream(); + ASSERT_NO_FATAL_FAILURE(DrainOutputs(&error_occurred)); + } +} + +TEST_P(AudioDecoderTest, MultipleInvalidInput) { + const size_t kMaxNumberOfInputToWrite = 128; + const size_t number_of_input_to_write = + std::min(kMaxNumberOfInputToWrite, dmp_reader_.number_of_audio_buffers()); + // Replace the content of the first few input buffers with invalid data. + // Every test instance loads its own copy of data so this won't affect other + // tests. + for (size_t i = 0; i < number_of_input_to_write; ++i) { + UseInvalidDataForInput(i, static_cast<uint8_t>(0xab + i)); + } + + bool error_occurred = true; + WriteMultipleInputs(0, number_of_input_to_write, &error_occurred); + if (!error_occurred) { + WriteEndOfStream(); + ASSERT_NO_FATAL_FAILURE(DrainOutputs(&error_occurred)); } }
diff --git a/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc b/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc index c977332..e19d7b6 100644 --- a/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc +++ b/src/starboard/shared/starboard/player/filter/testing/video_decoder_test.cc
@@ -113,7 +113,8 @@ output_mode_(std::get<0>(GetParam()).output_mode), using_stub_decoder_(std::get<1>(GetParam())), dmp_reader_(ResolveTestFileName(test_filename_).c_str()) { - SB_LOG(INFO) << "Testing " << test_filename_ + SB_LOG(INFO) << "Testing " << test_filename_ << ", output mode " + << output_mode_ << (using_stub_decoder_ ? " with stub video decoder." : "."); } @@ -198,7 +199,8 @@ enum Status { kNeedMoreInput = VideoDecoder::kNeedMoreInput, kBufferFull = VideoDecoder::kBufferFull, - kError + kError, + kTimeout }; struct Event { @@ -242,8 +244,7 @@ } SbThreadSleep(kSbTimeMillisecond); } - event->status = kError; - FAIL(); + event->status = kTimeout; } bool HasPendingEvents() { @@ -314,7 +315,7 @@ ASSERT_NO_FATAL_FAILURE(WriteSingleInput(start_index)); ++start_index; --number_of_inputs_to_write; - } else if (event.status == kError) { + } else if (event.status == kError || event.status == kTimeout) { // Assume that the caller does't expect an error when |event_cb| isn't // provided. ASSERT_TRUE(event_cb); @@ -356,7 +357,7 @@ while (!end_of_stream_decoded) { Event event; ASSERT_NO_FATAL_FAILURE(WaitForNextEvent(&event)); - if (event.status == kError) { + if (event.status == kError || event.status == kTimeout) { if (error_occurred) { *error_occurred = true; } else { @@ -591,7 +592,10 @@ ASSERT_NO_FATAL_FAILURE(DrainOutputs( &error_occurred, [=](const Event& event, bool* continue_process) { if (event.frame) { - AssertValidDecodeTargetWhenSupported(); + // TODO: On some platforms, decode texture will be ready only after + // rendered by renderer, so decode target is not always available + // at this point. We should provide a mock renderer and then check + // the decode target here with AssertValidDecodeTargetWhenSupported(). } *continue_process = true; })); @@ -619,19 +623,23 @@ UseInvalidDataForInput(0, 0xab); bool error_occurred = false; - + bool timeout_occurred = false; // Write first few frames. The first one is invalid and the rest are valid. WriteMultipleInputs(0, number_of_input_to_write, [&](const Event& event, bool* continue_process) { + if (event.status == kTimeout) { + timeout_occurred = true; + *continue_process = false; + return; + } if (event.status == kError) { error_occurred = true; *continue_process = false; return; } - *continue_process = event.status != kBufferFull; }); - + ASSERT_FALSE(timeout_occurred); if (!error_occurred) { GetDecodeTargetWhenSupported(); WriteEndOfStream(); @@ -654,8 +662,14 @@ } bool error_occurred = false; + bool timeout_occurred = false; WriteMultipleInputs(0, number_of_input_to_write, [&](const Event& event, bool* continue_process) { + if (event.status == kTimeout) { + timeout_occurred = true; + *continue_process = false; + return; + } if (event.status == kError) { error_occurred = true; *continue_process = false; @@ -664,7 +678,7 @@ *continue_process = event.status != kBufferFull; }); - + ASSERT_FALSE(timeout_occurred); if (!error_occurred) { GetDecodeTargetWhenSupported(); WriteEndOfStream(); @@ -692,21 +706,34 @@ TEST_P(VideoDecoderTest, ResetAfterInput) { const size_t kMaxInputToWrite = 10; - WriteMultipleInputs(0, kMaxInputToWrite, - [](const Event& event, bool* continue_process) { - *continue_process = event.status != kBufferFull; - }); - + bool error_occurred = false; + WriteMultipleInputs( + 0, kMaxInputToWrite, [&](const Event& event, bool* continue_process) { + if (event.status == kTimeout || event.status == kError) { + error_occurred = true; + *continue_process = false; + return; + } + *continue_process = event.status != kBufferFull; + }); + ASSERT_FALSE(error_occurred); ResetDecoderAndClearPendingEvents(); EXPECT_FALSE(HasPendingEvents()); } TEST_P(VideoDecoderTest, MultipleResets) { for (int max_inputs = 1; max_inputs < 10; ++max_inputs) { - WriteMultipleInputs(0, max_inputs, - [](const Event& event, bool* continue_process) { - *continue_process = event.status != kBufferFull; - }); + bool error_occurred = false; + WriteMultipleInputs( + 0, max_inputs, [&](const Event& event, bool* continue_process) { + if (event.status == kTimeout || event.status == kError) { + error_occurred = true; + *continue_process = false; + return; + } + *continue_process = event.status != kBufferFull; + }); + ASSERT_FALSE(error_occurred); ResetDecoderAndClearPendingEvents(); EXPECT_FALSE(HasPendingEvents()); WriteSingleInput(0); @@ -722,14 +749,20 @@ const size_t number_of_expected_decoded_frames = std::min( kMaxNumberOfExpectedDecodedFrames, dmp_reader_.number_of_video_buffers()); size_t frames_decoded = 0; + bool error_occurred = false; ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs( 0, dmp_reader_.number_of_video_buffers(), [&](const Event& event, bool* continue_process) { - SB_UNREFERENCED_PARAMETER(event); + if (event.status == kTimeout || event.status == kError) { + error_occurred = true; + *continue_process = false; + return; + } frames_decoded += decoded_frames_.size(); decoded_frames_.clear(); *continue_process = frames_decoded < number_of_expected_decoded_frames; })); + ASSERT_FALSE(error_occurred); if (frames_decoded < number_of_expected_decoded_frames) { WriteEndOfStream(); ASSERT_NO_FATAL_FAILURE(DrainOutputs()); @@ -739,39 +772,51 @@ TEST_P(VideoDecoderTest, Preroll) { SbTimeMonotonic start = SbTimeGetMonotonicNow(); SbTime preroll_timeout = video_decoder_->GetPrerollTimeout(); + bool error_occurred = false; ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs( 0, dmp_reader_.number_of_video_buffers(), - [=](const Event& event, bool* continue_process) { - SB_UNREFERENCED_PARAMETER(event); + [&](const Event& event, bool* continue_process) { + if (event.status == kError) { + error_occurred = true; + *continue_process = false; + return; + } if (decoded_frames_.size() >= video_decoder_->GetPrerollFrameCount()) { *continue_process = false; return; } if (SbTimeGetMonotonicNow() - start >= preroll_timeout) { + // After preroll timeout, we should get at least 1 decoded frame. + ASSERT_GT(decoded_frames_.size(), 0); *continue_process = false; return; } *continue_process = true; return; })); + ASSERT_FALSE(error_occurred); } TEST_P(VideoDecoderTest, HoldFramesUntilFull) { + bool error_occurred = false; ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs( 0, dmp_reader_.number_of_video_buffers(), - [=](const Event& event, bool* continue_process) { - SB_UNREFERENCED_PARAMETER(event); + [&](const Event& event, bool* continue_process) { + if (event.status == kTimeout || event.status == kError) { + error_occurred = true; + *continue_process = false; + return; + } *continue_process = decoded_frames_.size() < video_decoder_->GetMaxNumberOfCachedFrames(); })); + ASSERT_FALSE(error_occurred); WriteEndOfStream(); if (decoded_frames_.size() >= video_decoder_->GetMaxNumberOfCachedFrames()) { return; } - bool error_occurred = false; ASSERT_NO_FATAL_FAILURE(DrainOutputs( &error_occurred, [=](const Event& event, bool* continue_process) { - SB_UNREFERENCED_PARAMETER(event); *continue_process = decoded_frames_.size() < video_decoder_->GetMaxNumberOfCachedFrames(); })); @@ -786,24 +831,27 @@ } ++gop_size; } - + bool error_occurred = false; ASSERT_NO_FATAL_FAILURE(WriteMultipleInputs( - 0, gop_size, [=](const Event& event, bool* continue_process) { - SB_UNREFERENCED_PARAMETER(event); - while (decoded_frames_.size() >= - video_decoder_->GetPrerollFrameCount()) { + 0, gop_size, [&](const Event& event, bool* continue_process) { + if (event.status == kTimeout || event.status == kError) { + error_occurred = true; + *continue_process = false; + return; + } + // Keep 1 decoded frame, assuming it's used by renderer. + while (decoded_frames_.size() > 1) { decoded_frames_.pop_front(); } *continue_process = true; })); + ASSERT_FALSE(error_occurred); WriteEndOfStream(); - bool error_occurred = true; ASSERT_NO_FATAL_FAILURE(DrainOutputs( &error_occurred, [=](const Event& event, bool* continue_process) { - SB_UNREFERENCED_PARAMETER(event); - while (decoded_frames_.size() >= - video_decoder_->GetMaxNumberOfCachedFrames()) { + // Keep 1 decoded frame, assuming it's used by renderer. + while (decoded_frames_.size() > 1) { decoded_frames_.pop_front(); } *continue_process = true;
diff --git a/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc b/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc index a5f7002..afa527c 100644 --- a/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc +++ b/src/starboard/shared/starboard/player/filter/video_render_algorithm_impl.cc
@@ -90,13 +90,13 @@ if (frames->front()->timestamp() != last_frame_timestamp_) { #if SB_PLAYER_FILTER_ENABLE_STATE_CHECK auto now = SbTimeGetMonotonicNow(); - SB_LOG(ERROR) << "Dropping frame @ " << frames->front()->timestamp() - << " microseconds, the elasped media time/system time from" - << " last Render() call are " - << media_time - media_time_of_last_render_call_ << "/" - << now - system_time_of_last_render_call_ - << " microseconds, with " << frames->size() - << " frames in the backlog."; + SB_LOG(WARNING) + << "Dropping frame @ " << frames->front()->timestamp() + << " microseconds, the elasped media time/system time from" + << " last Render() call are " + << media_time - media_time_of_last_render_call_ << "/" + << now - system_time_of_last_render_call_ << " microseconds, with " + << frames->size() << " frames in the backlog."; #endif // SB_PLAYER_FILTER_ENABLE_STATE_CHECK ++dropped_frames_; }
diff --git a/src/starboard/shared/starboard/player/input_buffer_internal.cc b/src/starboard/shared/starboard/player/input_buffer_internal.cc index 48d7ed4..c757c6d 100644 --- a/src/starboard/shared/starboard/player/input_buffer_internal.cc +++ b/src/starboard/shared/starboard/player/input_buffer_internal.cc
@@ -100,8 +100,9 @@ DeallocateSampleBuffer(data_); if (size > 0) { - flattened_data_.resize(size); - SbMemoryCopy(flattened_data_.data(), buffer, size); + flattened_data_.clear(); + flattened_data_.assign(static_cast<const uint8_t*>(buffer), + static_cast<const uint8_t*>(buffer) + size); data_ = flattened_data_.data(); } else { data_ = NULL;
diff --git a/src/starboard/shared/starboard/player/player_internal.cc b/src/starboard/shared/starboard/player/player_internal.cc index ebbba98..7312db7 100644 --- a/src/starboard/shared/starboard/player/player_internal.cc +++ b/src/starboard/shared/starboard/player/player_internal.cc
@@ -71,6 +71,8 @@ this, context)); ++number_of_players_; + SB_DLOG(INFO) << "Creating SbPlayerPrivate. There are " << number_of_players_ + << " players."; } // static
diff --git a/src/starboard/shared/starboard/player/player_internal.h b/src/starboard/shared/starboard/player/player_internal.h index e6e713e..9cadbb7 100644 --- a/src/starboard/shared/starboard/player/player_internal.h +++ b/src/starboard/shared/starboard/player/player_internal.h
@@ -62,7 +62,11 @@ SbDecodeTarget GetCurrentDecodeTarget(); - ~SbPlayerPrivate() { --number_of_players_; } + ~SbPlayerPrivate() { + --number_of_players_; + SB_DLOG(INFO) << "Destroying SbPlayerPrivate. There are " + << number_of_players_ << " players."; + } static int number_of_players() { return number_of_players_; }
diff --git a/src/starboard/shared/starboard/player/video_dmp_common.cc b/src/starboard/shared/starboard/player/video_dmp_common.cc index 2770b9b..1a97ed8 100644 --- a/src/starboard/shared/starboard/player/video_dmp_common.cc +++ b/src/starboard/shared/starboard/player/video_dmp_common.cc
@@ -108,16 +108,8 @@ &audio_sample_info->audio_specific_config_size); audio_sample_info->stored_audio_specific_config.resize( audio_sample_info->audio_specific_config_size); -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) audio_sample_info->audio_specific_config = audio_sample_info->stored_audio_specific_config.data(); -#else // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) - SB_DCHECK(sizeof(audio_sample_info->audio_specific_config) >= - audio_sample_info->stored_audio_specific_config.size()); - SbMemoryCopy(audio_sample_info->audio_specific_config, - audio_sample_info->stored_audio_specific_config.data(), - audio_sample_info->stored_audio_specific_config.size()); -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) Read(read_cb, audio_sample_info->stored_audio_specific_config.data(), audio_sample_info->audio_specific_config_size); }
diff --git a/src/starboard/shared/starboard/player/video_dmp_common.h b/src/starboard/shared/starboard/player/video_dmp_common.h index a6a8d44..5625142 100644 --- a/src/starboard/shared/starboard/player/video_dmp_common.h +++ b/src/starboard/shared/starboard/player/video_dmp_common.h
@@ -76,13 +76,7 @@ SbMediaAudioSampleInfoWithConfig(const SbMediaAudioSampleInfoWithConfig& that) : SbMediaAudioSampleInfo(that), stored_audio_specific_config(that.stored_audio_specific_config) { -#if SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) audio_specific_config = stored_audio_specific_config.data(); -#else // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) - SB_DCHECK(8 >= stored_audio_specific_config.size()); - SbMemoryCopy(audio_specific_config, stored_audio_specific_config.data(), - stored_audio_specific_config.size()); -#endif // SB_HAS(AUDIO_SPECIFIC_CONFIG_AS_POINTER) } void operator=(const SbMediaAudioSampleInfoWithConfig& that) = delete;
diff --git a/src/cobalt/dom/c_val_key_list.idl b/src/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc similarity index 62% rename from src/cobalt/dom/c_val_key_list.idl rename to src/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc index ffe9013..f64f8ec 100644 --- a/src/cobalt/dom/c_val_key_list.idl +++ b/src/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc
@@ -1,4 +1,4 @@ -// Copyright 2016 The Cobalt Authors. All Rights Reserved. +// Copyright 2019 The Cobalt Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -12,9 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. -[ArrayClass] -interface CValKeyList { - getter DOMString? item(unsigned long index); - readonly attribute unsigned long length; - long indexOf(DOMString key); -}; +#include "starboard/audio_sink.h" + +int SbAudioSinkGetMinBufferSizeInFrames(int /*channels*/, + SbMediaAudioSampleType /*sample_type*/, + int /*sampling_frequency_hz*/) { + return 8 * 1024; +}
diff --git a/src/starboard/shared/stub/drm_create_system.cc b/src/starboard/shared/stub/drm_create_system.cc index b384a3f..5d8628f 100644 --- a/src/starboard/shared/stub/drm_create_system.cc +++ b/src/starboard/shared/stub/drm_create_system.cc
@@ -52,7 +52,7 @@ return kSbDrmSystemInvalid; } -#elif SB_HAS(DRM_KEY_STATUSES) +#else // SB_HAS(DRM_SESSION_CLOSED) SbDrmSystem SbDrmCreateSystem( const char* key_system, @@ -68,18 +68,4 @@ return kSbDrmSystemInvalid; } -#else // SB_API_VERSION >= 10 - -SbDrmSystem SbDrmCreateSystem( - const char* key_system, - void* context, - SbDrmSessionUpdateRequestFunc update_request_callback, - SbDrmSessionUpdatedFunc session_updated_callback) { - SB_UNREFERENCED_PARAMETER(context); - SB_UNREFERENCED_PARAMETER(key_system); - SB_UNREFERENCED_PARAMETER(update_request_callback); - SB_UNREFERENCED_PARAMETER(session_updated_callback); - return kSbDrmSystemInvalid; -} - -#endif // SB_API_VERSION >= 10 +#endif // SB_HAS(DRM_SESSION_CLOSED)
diff --git a/src/starboard/shared/stub/image_decode.cc b/src/starboard/shared/stub/image_decode.cc index 42369db..e3a2043 100644 --- a/src/starboard/shared/stub/image_decode.cc +++ b/src/starboard/shared/stub/image_decode.cc
@@ -15,10 +15,6 @@ #include "starboard/configuration.h" #include "starboard/image.h" -#if !SB_HAS(GRAPHICS) -#error "SbImageDecode requires SB_HAS(GRAPHICS)." -#endif - SbDecodeTarget SbImageDecode(SbDecodeTargetGraphicsContextProvider* provider, void* data, int data_size,
diff --git a/src/starboard/shared/stub/image_is_decode_supported.cc b/src/starboard/shared/stub/image_is_decode_supported.cc index 984a139..9e04d60 100644 --- a/src/starboard/shared/stub/image_is_decode_supported.cc +++ b/src/starboard/shared/stub/image_is_decode_supported.cc
@@ -15,10 +15,6 @@ #include "starboard/configuration.h" #include "starboard/image.h" -#if !SB_HAS(GRAPHICS) -#error "Requires SB_HAS(GRAPHICS)." -#endif - bool SbImageIsDecodeSupported(const char* mime_type, SbDecodeTargetFormat format) { SB_UNREFERENCED_PARAMETER(mime_type);
diff --git a/src/starboard/shared/stub/system_sign_with_certification_secret_key.cc b/src/starboard/shared/stub/system_sign_with_certification_secret_key.cc new file mode 100644 index 0000000..b64bb21 --- /dev/null +++ b/src/starboard/shared/stub/system_sign_with_certification_secret_key.cc
@@ -0,0 +1,26 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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 "starboard/system.h" + +#if SB_API_VERSION >= 11 + +bool SbSystemSignWithCertificationSecretKey(const uint8_t* message, + size_t message_size_in_bytes, + uint8_t* digest, + size_t digest_size_in_bytes) { + return false; +} + +#endif // SB_API_VERSION >= 11
diff --git a/src/starboard/shared/widevine/drm_create_system.cc b/src/starboard/shared/widevine/drm_create_system.cc index 544fb79..595cf4d 100644 --- a/src/starboard/shared/widevine/drm_create_system.cc +++ b/src/starboard/shared/widevine/drm_create_system.cc
@@ -30,11 +30,8 @@ const char* key_system, void* context, SbDrmSessionUpdateRequestFunc update_request_callback, - SbDrmSessionUpdatedFunc session_updated_callback -#if SB_HAS(DRM_KEY_STATUSES) - , + SbDrmSessionUpdatedFunc session_updated_callback, SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 , SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback, @@ -45,11 +42,9 @@ if (!update_request_callback || !session_updated_callback) { return kSbDrmSystemInvalid; } -#if SB_HAS(DRM_KEY_STATUSES) if (!key_statuses_changed_callback) { return kSbDrmSystemInvalid; } -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 if (!server_certificate_updated_callback || !session_closed_callback) { return kSbDrmSystemInvalid; @@ -63,10 +58,8 @@ << "premium content playback resolution may be limited."; return new DrmSystemWidevine(context, update_request_callback, session_updated_callback -#if SB_HAS(DRM_KEY_STATUSES) , key_statuses_changed_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 , server_certificate_updated_callback
diff --git a/src/starboard/shared/widevine/drm_system_widevine.cc b/src/starboard/shared/widevine/drm_system_widevine.cc index 8d6ff57..e884249 100644 --- a/src/starboard/shared/widevine/drm_system_widevine.cc +++ b/src/starboard/shared/widevine/drm_system_widevine.cc
@@ -41,6 +41,11 @@ const char* kWidevineKeySystem[] = {"com.widevine", "com.widevine.alpha"}; const char kWidevineStorageFileName[] = "wvcdm.dat"; +// Key usage may be blocked due to incomplete HDCP authentication which could +// take up to 5 seconds. For such a case it is good to give a try few times to +// get HDCP authentication complete. We set a timeout of 6 seconds for retries. +const SbTimeMonotonic kUnblockKeyRetryTimeout = kSbTimeSecond * 6; + class WidevineClock : public wv3cdm::IClock { public: int64_t now() override { @@ -193,11 +198,8 @@ DrmSystemWidevine::DrmSystemWidevine( void* context, SbDrmSessionUpdateRequestFunc session_update_request_callback, - SbDrmSessionUpdatedFunc session_updated_callback -#if SB_HAS(DRM_KEY_STATUSES) - , + SbDrmSessionUpdatedFunc session_updated_callback, SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 , SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback @@ -212,9 +214,7 @@ : context_(context), session_update_request_callback_(session_update_request_callback), session_updated_callback_(session_updated_callback), -#if SB_HAS(DRM_KEY_STATUSES) key_statuses_changed_callback_(key_statuses_changed_callback), -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 server_certificate_updated_callback_(server_certificate_updated_callback), #endif // SB_API_VERSION >= 10 @@ -320,6 +320,7 @@ sb_drm_session_id, sb_drm_session_id_size, &wvcdm_session_id); SB_DCHECK(succeeded); status = cdm_->update(wvcdm_session_id, str_key); + first_update_session_received_.store(true); } SB_DLOG(INFO) << "Update keys status " << status; #if SB_API_VERSION >= 10 @@ -395,6 +396,10 @@ return kSuccess; } + if (!first_update_session_received_.load()) { + return kRetry; + } + // Adapt |buffer| and |drm_info| to a |cdm::InputBuffer|. SB_DCHECK(drm_info->initialization_vector_size == kInitializationVectorSize); std::vector<uint8_t> initialization_vector( @@ -459,6 +464,18 @@ SB_DLOG(ERROR) << "Decrypt status: kNoKey"; return kRetry; } + if (status == wv3cdm::kKeyUsageBlockedByPolicy) { + { + ScopedLock lock(unblock_key_retry_mutex_); + if (!unblock_key_retry_start_time_) { + unblock_key_retry_start_time_ = SbTimeGetMonotonicNow(); + } + } + if (SbTimeGetMonotonicNow() - unblock_key_retry_start_time_.value() < + kUnblockKeyRetryTimeout) { + return kRetry; + } + } SB_DLOG(ERROR) << "Decrypt status " << status; SB_DLOG(ERROR) << "Key ID " << wvcdm::b2a_hex( @@ -467,7 +484,10 @@ drm_info->identifier_size)); return kFailure; } - + { + ScopedLock lock(unblock_key_retry_mutex_); + unblock_key_retry_start_time_ = nullopt; + } input.data += subsample.encrypted_byte_count; output.data += subsample.encrypted_byte_count; output.data_length -= subsample.encrypted_byte_count; @@ -582,7 +602,6 @@ void DrmSystemWidevine::onKeyStatusesChange( const std::string& wvcdm_session_id) { -#if SB_HAS(DRM_KEY_STATUSES) wv3cdm::KeyStatusMap key_statuses; wv3cdm::Status status = cdm_->getKeyStatuses(wvcdm_session_id, &key_statuses); @@ -608,9 +627,6 @@ key_statuses_changed_callback_(this, context_, sb_drm_session_id.c_str(), sb_drm_session_id.size(), sb_key_ids.size(), sb_key_ids.data(), sb_key_statuses.data()); -#else // SB_HAS(DRM_KEY_STATUSES) - SB_UNREFERENCED_PARAMETER(wvcdm_session_id); -#endif // SB_HAS(DRM_KEY_STATUSES) } void DrmSystemWidevine::onRemoveComplete(const std::string& wvcdm_session_id) {
diff --git a/src/starboard/shared/widevine/drm_system_widevine.h b/src/starboard/shared/widevine/drm_system_widevine.h index c8e9d22..fb7bce7 100644 --- a/src/starboard/shared/widevine/drm_system_widevine.h +++ b/src/starboard/shared/widevine/drm_system_widevine.h
@@ -20,7 +20,10 @@ #include <string> #include <vector> +#include "starboard/atomic.h" +#include "starboard/common/optional.h" #include "starboard/common/scoped_ptr.h" +#include "starboard/mutex.h" #include "starboard/shared/starboard/drm/drm_system_internal.h" #include "starboard/shared/starboard/thread_checker.h" #include "starboard/thread.h" @@ -41,11 +44,8 @@ DrmSystemWidevine( void* context, SbDrmSessionUpdateRequestFunc update_request_callback, - SbDrmSessionUpdatedFunc session_updated_callback -#if SB_HAS(DRM_KEY_STATUSES) - , + SbDrmSessionUpdatedFunc session_updated_callback, SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 , SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback @@ -163,9 +163,7 @@ void* const context_; const SbDrmSessionUpdateRequestFunc session_update_request_callback_; const SbDrmSessionUpdatedFunc session_updated_callback_; -#if SB_HAS(DRM_KEY_STATUSES) const SbDrmSessionKeyStatusesChangedFunc key_statuses_changed_callback_; -#endif // SB_HAS(DRM_KEY_STATUSES) #if SB_API_VERSION >= 10 const SbDrmServerCertificateUpdatedFunc server_certificate_updated_callback_; #endif // SB_API_VERSION >= 10 @@ -204,10 +202,15 @@ volatile bool quitting_ = false; + Mutex unblock_key_retry_mutex_; + optional<SbTimeMonotonic> unblock_key_retry_start_time_; + #if !defined(COBALT_BUILD_TYPE_GOLD) int number_of_session_updates_sent_ = 0; int maximum_number_of_session_updates_ = std::numeric_limits<int>::max(); #endif // !defined(COBALT_BUILD_TYPE_GOLD) + + atomic_bool first_update_session_received_{false}; }; } // namespace widevine
diff --git a/src/starboard/stub/stub_sources.gypi b/src/starboard/stub/stub_sources.gypi index 27da555..8a9cffb 100644 --- a/src/starboard/stub/stub_sources.gypi +++ b/src/starboard/stub/stub_sources.gypi
@@ -31,6 +31,7 @@ '<(DEPTH)/starboard/shared/stub/audio_sink_create.cc', '<(DEPTH)/starboard/shared/stub/audio_sink_destroy.cc', '<(DEPTH)/starboard/shared/stub/audio_sink_get_max_channels.cc', + '<(DEPTH)/starboard/shared/stub/audio_sink_get_min_buffer_size_in_frames.cc', '<(DEPTH)/starboard/shared/stub/audio_sink_get_nearest_supported_sample_frequency.cc', '<(DEPTH)/starboard/shared/stub/audio_sink_is_audio_frame_storage_type_supported.cc', '<(DEPTH)/starboard/shared/stub/audio_sink_is_audio_sample_type_supported.cc', @@ -56,6 +57,8 @@ '<(DEPTH)/starboard/shared/stub/cryptography_set_authenticated_data.cc', '<(DEPTH)/starboard/shared/stub/cryptography_set_initialization_vector.cc', '<(DEPTH)/starboard/shared/stub/cryptography_transform.cc', + '<(DEPTH)/starboard/shared/stub/decode_target_get_info.cc', + '<(DEPTH)/starboard/shared/stub/decode_target_release.cc', '<(DEPTH)/starboard/shared/stub/directory_can_open.cc', '<(DEPTH)/starboard/shared/stub/directory_close.cc', '<(DEPTH)/starboard/shared/stub/directory_create.cc', @@ -74,6 +77,8 @@ '<(DEPTH)/starboard/shared/stub/drm_system_internal.h', '<(DEPTH)/starboard/shared/stub/drm_update_server_certificate.cc', '<(DEPTH)/starboard/shared/stub/drm_update_session.cc', + '<(DEPTH)/starboard/shared/stub/image_decode.cc', + '<(DEPTH)/starboard/shared/stub/image_is_decode_supported.cc', '<(DEPTH)/starboard/shared/stub/file_can_open.cc', '<(DEPTH)/starboard/shared/stub/file_close.cc', '<(DEPTH)/starboard/shared/stub/file_delete.cc', @@ -253,6 +258,7 @@ '<(DEPTH)/starboard/shared/stub/system_request_stop.cc', '<(DEPTH)/starboard/shared/stub/system_request_suspend.cc', '<(DEPTH)/starboard/shared/stub/system_request_unpause.cc', + '<(DEPTH)/starboard/shared/stub/system_sign_with_certification_secret_key.cc', '<(DEPTH)/starboard/shared/stub/system_sort.cc', '<(DEPTH)/starboard/shared/stub/system_supports_resume.cc', '<(DEPTH)/starboard/shared/stub/system_symbolize.cc',
diff --git a/src/starboard/system.h b/src/starboard/system.h index 0012d64..1f41f54 100644 --- a/src/starboard/system.h +++ b/src/starboard/system.h
@@ -618,6 +618,24 @@ SB_EXPORT const void* SbSystemGetExtension(const char* name); #endif // SB_API_VERSION >= 11 +#if SB_API_VERSION >= 11 +// Computes a HMAC-SHA256 digest of |message| into |digest| using the +// application's certification secret. +// +// This function may be implemented as an alternative to implementing +// SbSystemGetProperty(kSbSystemPropertyBase64EncodedCertificationSecret), +// however both should not be implemented. +// +// The output will be written into |digest|. |digest_size_in_bytes| must be 32 +// (or greater), since 32-bytes will be written into it. +// Returns false in the case of an error, or if it is not implemented. In this +// case the contents of |digest| will be undefined. +bool SbSystemSignWithCertificationSecretKey(const uint8_t* message, + size_t message_size_in_bytes, + uint8_t* digest, + size_t digest_size_in_bytes); +#endif + #ifdef __cplusplus } // extern "C" #endif
diff --git a/src/starboard/tools/app_launcher_packager.py b/src/starboard/tools/app_launcher_packager.py index 092b387..4991c6a 100644 --- a/src/starboard/tools/app_launcher_packager.py +++ b/src/starboard/tools/app_launcher_packager.py
@@ -66,6 +66,8 @@ from paths import REPOSITORY_ROOT from paths import THIRD_PARTY_ROOT sys.path.append(THIRD_PARTY_ROOT) +from cobalt.build import cobalt_archive_extract +import starboard.build.port_symlink as port_symlink import starboard.tools.platform import jinja2 @@ -168,10 +170,18 @@ def _CopyAppLauncherTools(repo_root, dest_root, additional_glob_patterns, include_black_box_tests): - # Step 1: Remove previous output directory if it exists + # Step 1: Make sure dest_root is an absolute path. + logging.info('Copying App Launcher tools to = %s', dest_root) + dest_root = os.path.normpath(dest_root) + if not os.path.isabs(dest_root): + dest_root = os.path.join(os.getcwd(), dest_root) + if port_symlink.IsWindows(): + dest_root = cobalt_archive_extract.ToWinUncPath(dest_root) + logging.info('Absolute destination path = %s', dest_root) + # Step 2: Remove previous output directory if it exists if os.path.isdir(dest_root): shutil.rmtree(dest_root) - # Step 2: Find all glob files from specified search directories. + # Step 3: Find all glob files from specified search directories. include_glob_patterns = _INCLUDE_FILE_PATTERNS if additional_glob_patterns: include_glob_patterns += additional_glob_patterns @@ -190,7 +200,7 @@ copy_list = list(set(copy_list)) copy_list.sort() folders_logged = set() - # Step 3: Copy the src files to the destination directory. + # Step 4: Copy the src files to the destination directory. for src in copy_list: tail_path = os.path.relpath(src, repo_root) dst = os.path.join(dest_root, tail_path) @@ -202,7 +212,7 @@ folders_logged.add(src_folder) logging.info(src_folder + ' -> ' + os.path.dirname(dst)) shutil.copy2(src, dst) - # Step 4: Re-write the platform infos file in the new repo copy. + # Step 5: Re-write the platform infos file in the new repo copy. _WritePlatformsInfo(repo_root, dest_root)
diff --git a/src/starboard/tools/testing/test_runner.py b/src/starboard/tools/testing/test_runner.py index ee3b7d7..5896355 100755 --- a/src/starboard/tools/testing/test_runner.py +++ b/src/starboard/tools/testing/test_runner.py
@@ -288,7 +288,7 @@ def _GetAllTestEnvVariables(self): """Gets all environment variables used for tests on the given platform.""" - env_variables = self._platform_config.GetTestEnvVariables() + env_variables = {} for test, test_env in self._app_config.GetTestEnvVariables().iteritems(): if test in env_variables: env_variables[test].update(test_env) @@ -309,7 +309,9 @@ """ # Get the environment variables for the test target - env = self.test_env_vars.get(target_name, {}) + env = {} + env.update(self._platform_config.GetTestEnvVariables()) + env.update(self.test_env_vars.get(target_name, {})) # Set up a pipe for processing test output read_fd, write_fd = os.pipe() @@ -362,13 +364,19 @@ self.threads.append(test_launcher) self.threads.append(test_reader) + dump_params = " ARGS:" + " ".join(test_params) if test_params else "" + dump_env = " ENV VARS: " + ";".join( + "{}={}".format(k, v) for k, v in env.items()) if env else "" # Output either the name of the test target or the specific test case # being run. # pylint: disable=g-long-ternary - sys.stdout.write( - "Starting {}".format(test_name if test_name else target_name)) + sys.stdout.write("Starting {}{}{}".format( + test_name if test_name else target_name, dump_params, dump_env)) if self.dry_run: + # Output a newline before running the test target / case. + sys.stdout.write("\n") + if test_params: sys.stdout.write(" {}\n".format(test_params)) write_pipe.close() @@ -517,14 +525,16 @@ flaky_passed_tests = [] for test_case in flaky_failed_tests: for retry in range(_FLAKY_RETRY_LIMIT): - retry_result = self._RunTest(target_name, test_case) + # Sometimes the returned test "name" includes information about the + # parameter that was passed to it. This needs to be stripped off. + retry_result = self._RunTest(target_name, test_case.split(",")[0]) print # Explicit print for empty formatting line. if retry_result[2] == 1: flaky_passed_tests.append(test_case) logging.info("%s succeeded on run #%d!\n", test_case, retry + 2) break else: - logging.warning("%s Failed. Re-running...\n", test_case) + logging.warning("%s failed. Re-running...\n", test_case) # Remove newly passing flaky tests from failing flaky test list. for test_case in flaky_passed_tests: flaky_failed_tests.remove(test_case)
diff --git a/src/testing/gtest/include/gtest/gtest.h b/src/testing/gtest/include/gtest/gtest.h index 8e8d922..4f611e1 100644 --- a/src/testing/gtest/include/gtest/gtest.h +++ b/src/testing/gtest/include/gtest/gtest.h
@@ -66,6 +66,14 @@ #include "gtest/gtest-test-part.h" #include "gtest/gtest-typed-test.h" +#if defined(COBALT_BUILD_TYPE_QA) +#error You cannot build unit tests in qa builds. +#endif + +#if defined(COBALT_BUILD_TYPE_GOLD) +#error You cannot build unit tests in gold builds. +#endif + // Depending on the platform, different string classes are available. // On Linux, in addition to ::std::string, Google also makes use of // class ::string, which has the same interface as ::std::string, but
diff --git a/src/testing/gtest/include/gtest/internal/gtest-port.h b/src/testing/gtest/include/gtest/internal/gtest-port.h index b060901..2f88ab2 100644 --- a/src/testing/gtest/include/gtest/internal/gtest-port.h +++ b/src/testing/gtest/include/gtest/internal/gtest-port.h
@@ -1572,7 +1572,7 @@ } else { T* new_value = new T(); bool is_set = SbThreadSetLocalValue(key_, new_value); - SB_DCHECK(is_set); + SB_CHECK(is_set); return new_value; } }
diff --git a/src/third_party/boringssl/boringssl.gyp b/src/third_party/boringssl/boringssl.gyp index a6cd7c8..692b6c7 100644 --- a/src/third_party/boringssl/boringssl.gyp +++ b/src/third_party/boringssl/boringssl.gyp
@@ -15,7 +15,6 @@ 'OPENSSL_NO_DTLS1', ], 'cflags': [ - '-g', '-fPIC', '-fvisibility=hidden', ],
diff --git a/src/third_party/boringssl/boringssl.gypi b/src/third_party/boringssl/boringssl.gypi index c1e4e2e..69d1a1f 100644 --- a/src/third_party/boringssl/boringssl.gypi +++ b/src/third_party/boringssl/boringssl.gypi
@@ -208,11 +208,13 @@ '<(boringssl_root)/crypto/rc4/rc4.c', '<(boringssl_root)/crypto/refcount_c11.c', '<(boringssl_root)/crypto/refcount_lock.c', + '<(boringssl_root)/crypto/refcount_starboard.c', '<(boringssl_root)/crypto/rsa_extra/rsa_asn1.c', '<(boringssl_root)/crypto/stack/stack.c', '<(boringssl_root)/crypto/thread.c', '<(boringssl_root)/crypto/thread_none.c', '<(boringssl_root)/crypto/thread_pthread.c', + '<(boringssl_root)/crypto/thread_starboard.cc', '<(boringssl_root)/crypto/thread_win.c', '<(boringssl_root)/crypto/x509/a_digest.c', '<(boringssl_root)/crypto/x509/a_sign.c',
diff --git a/src/third_party/boringssl/src/crypto/internal.h b/src/third_party/boringssl/src/crypto/internal.h index 4b88bcf..dc9c61b 100644 --- a/src/third_party/boringssl/src/crypto/internal.h +++ b/src/third_party/boringssl/src/crypto/internal.h
@@ -116,6 +116,10 @@ #include <assert.h> #include <string.h> +#include "starboard/atomic.h" +#include "starboard/once.h" +#include "starboard/thread.h" + #if !defined(__cplusplus) #if defined(__GNUC__) && \ (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 @@ -370,7 +374,10 @@ // Thread-safe initialisation. -#if defined(OPENSSL_NO_THREADS) +#if defined(STARBOARD) +typedef SbOnceControl CRYPTO_once_t; +#define CRYPTO_ONCE_INIT SB_ONCE_INITIALIZER +#elif defined(OPENSSL_NO_THREADS) typedef uint32_t CRYPTO_once_t; #define CRYPTO_ONCE_INIT 0 #elif defined(OPENSSL_WINDOWS_THREADS) @@ -390,13 +397,21 @@ // // The |once| argument must be a |CRYPTO_once_t| that has been initialised with // the value |CRYPTO_ONCE_INIT|. +#if defined(STARBOARD) +#define CRYPTO_once SbOnce +#else OPENSSL_EXPORT void CRYPTO_once(CRYPTO_once_t *once, void (*init)(void)); +#endif // Reference counting. // CRYPTO_REFCOUNT_MAX is the value at which the reference count saturates. +#if defined(STARBOARD) +#define CRYPTO_REFCOUNT_MAX 0x7fffffff +#else #define CRYPTO_REFCOUNT_MAX 0xffffffff +#endif // CRYPTO_refcount_inc atomically increments the value at |*count| unless the // value would overflow. It's safe for multiple threads to concurrently call @@ -426,7 +441,13 @@ // thread.h as a structure large enough to fit the real type. The global lock is // a different type so it may be initialized with platform initializer macros. -#if defined(OPENSSL_NO_THREADS) +#if defined(STARBOARD) +struct CRYPTO_STATIC_MUTEX { + SbAtomic32 initialized; + CRYPTO_MUTEX mutex; +}; +#define CRYPTO_STATIC_MUTEX_INIT { 0 } +#elif defined(OPENSSL_NO_THREADS) struct CRYPTO_STATIC_MUTEX { char padding; // Empty structs have different sizes in C and C++. };
diff --git a/src/third_party/boringssl/src/crypto/refcount_lock.c b/src/third_party/boringssl/src/crypto/refcount_lock.c index 54bc6ca..f6f0727 100644 --- a/src/third_party/boringssl/src/crypto/refcount_lock.c +++ b/src/third_party/boringssl/src/crypto/refcount_lock.c
@@ -19,7 +19,7 @@ #include <openssl/type_check.h> -#if !defined(OPENSSL_C11_ATOMIC) +#if !defined(OPENSSL_C11_ATOMIC) && !defined(STARBOARD) OPENSSL_COMPILE_ASSERT((CRYPTO_refcount_t)-1 == CRYPTO_REFCOUNT_MAX, CRYPTO_REFCOUNT_MAX_is_incorrect); @@ -50,4 +50,4 @@ return ret; } -#endif // OPENSSL_C11_ATOMIC +#endif // !OPENSSL_C11_ATOMIC && !STARBOARD
diff --git a/src/third_party/boringssl/src/crypto/refcount_starboard.c b/src/third_party/boringssl/src/crypto/refcount_starboard.c new file mode 100644 index 0000000..8c9bc39 --- /dev/null +++ b/src/third_party/boringssl/src/crypto/refcount_starboard.c
@@ -0,0 +1,57 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// Based on refcount_c11.c implementation. + +#include "internal.h" + +#if defined(STARBOARD) + +#include "starboard/atomic.h" + +void CRYPTO_refcount_inc(CRYPTO_refcount_t *count) { + CRYPTO_refcount_t expected = SbAtomicNoBarrier_Load(count); + + while (expected != CRYPTO_REFCOUNT_MAX) { + CRYPTO_refcount_t new_value = expected + 1; + CRYPTO_refcount_t old_value = SbAtomicNoBarrier_CompareAndSwap( + count, expected, new_value); + if (old_value == expected) { + break; + } + expected = old_value; + } +} + +int CRYPTO_refcount_dec_and_test_zero(CRYPTO_refcount_t *count) { + CRYPTO_refcount_t expected = SbAtomicNoBarrier_Load(count); + + for (;;) { + if (expected == 0) { + OPENSSL_port_abort(); + } else if (expected == CRYPTO_REFCOUNT_MAX) { + return 0; + } else { + CRYPTO_refcount_t new_value = expected - 1; + CRYPTO_refcount_t old_value = SbAtomicNoBarrier_CompareAndSwap( + count, expected, new_value); + if (old_value == expected) { + return new_value == 0; + } + expected = old_value; + } + } +} + +#endif // defined(STARBOARD)
diff --git a/src/third_party/boringssl/src/crypto/thread_none.c b/src/third_party/boringssl/src/crypto/thread_none.c index 718d960..8475854 100644 --- a/src/third_party/boringssl/src/crypto/thread_none.c +++ b/src/third_party/boringssl/src/crypto/thread_none.c
@@ -14,7 +14,7 @@ #include "internal.h" -#if defined(OPENSSL_NO_THREADS) +#if defined(OPENSSL_NO_THREADS) && !defined(STARBOARD) void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {} @@ -56,4 +56,4 @@ return 1; } -#endif // OPENSSL_NO_THREADS +#endif // OPENSSL_NO_THREADS && !STARBOARD
diff --git a/src/third_party/boringssl/src/crypto/thread_starboard.cc b/src/third_party/boringssl/src/crypto/thread_starboard.cc new file mode 100644 index 0000000..40ac897 --- /dev/null +++ b/src/third_party/boringssl/src/crypto/thread_starboard.cc
@@ -0,0 +1,231 @@ +// Copyright 2019 The Cobalt Authors. All Rights Reserved. +// +// 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. + +// Based on thread_pthread.c. + +#include "internal.h" + +#if defined(STARBOARD) + +#include <openssl/mem.h> + +#include "starboard/once.h" +#include "starboard/thread.h" + +namespace { + +// Each enum of thread_local_data_t corresponds to a ThreadLocalEntry. +struct ThreadLocalEntry { + thread_local_destructor_t destructor; + void* value; +}; + +// One thread local key will point to an array of ThreadLocalEntry. +SbThreadLocalKey g_thread_local_key = kSbThreadLocalKeyInvalid; + +// Control the creation of the global thread local key. +SbOnceControl g_thread_local_once_control = SB_ONCE_INITIALIZER; + +void ThreadLocalDestructor(void* value) { + if (value) { + ThreadLocalEntry* thread_locals = static_cast<ThreadLocalEntry*>(value); + for (int i = 0; i < NUM_OPENSSL_THREAD_LOCALS; ++i) { + if (thread_locals[i].destructor != nullptr) { + thread_locals[i].destructor(thread_locals[i].value); + } + } + OPENSSL_free(value); + } +} + +void ThreadLocalInit() { + g_thread_local_key = SbThreadCreateLocalKey(&ThreadLocalDestructor); +} + +void EnsureInitialized(struct CRYPTO_STATIC_MUTEX* lock) { + enum { + kUninitialized = 0, + kInitializing, + kInitialized + }; + + if (SbAtomicNoBarrier_Load(&lock->initialized) == kInitialized) { + return; + } + if (SbAtomicNoBarrier_CompareAndSwap(&lock->initialized, + kUninitialized, kInitializing) == kUninitialized) { + CRYPTO_MUTEX_init(&lock->mutex); + SbAtomicNoBarrier_Store(&lock->initialized, kInitialized); + return; + } + while (SbAtomicNoBarrier_Load(&lock->initialized) != kInitialized) { + SbThreadSleep(kSbTimeMillisecond); + } +} + +} // namespace + +void CRYPTO_MUTEX_init(CRYPTO_MUTEX* lock) { + if (!SbMutexCreate(&lock->mutex)) { + OPENSSL_port_abort(); + } + if (!SbConditionVariableCreate(&lock->condition, &lock->mutex)) { + OPENSSL_port_abort(); + } + lock->readers = 0; + lock->writing = false; +} + +// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock +void CRYPTO_MUTEX_lock_read(CRYPTO_MUTEX* lock) { + if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) { + OPENSSL_port_abort(); + } + while (lock->writing) { + if (SbConditionVariableWait(&lock->condition, &lock->mutex) == + kSbConditionVariableFailed) { + OPENSSL_port_abort(); + } + } + ++(lock->readers); + if (!SbMutexRelease(&lock->mutex)) { + OPENSSL_port_abort(); + } +} + +// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock +void CRYPTO_MUTEX_lock_write(CRYPTO_MUTEX* lock) { + if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) { + OPENSSL_port_abort(); + } + while (lock->writing) { + if (SbConditionVariableWait(&lock->condition, &lock->mutex) == + kSbConditionVariableFailed) { + OPENSSL_port_abort(); + } + } + lock->writing = true; + while (lock->readers > 0) { + if (SbConditionVariableWait(&lock->condition, &lock->mutex) == + kSbConditionVariableFailed) { + OPENSSL_port_abort(); + } + } + if (!SbMutexRelease(&lock->mutex)) { + OPENSSL_port_abort(); + } +} + +// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock +void CRYPTO_MUTEX_unlock_read(CRYPTO_MUTEX* lock) { + if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) { + OPENSSL_port_abort(); + } + if (--(lock->readers) == 0) { + SbConditionVariableBroadcast(&lock->condition); + } + if (!SbMutexRelease(&lock->mutex)) { + OPENSSL_port_abort(); + } +} + +// https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock +void CRYPTO_MUTEX_unlock_write(CRYPTO_MUTEX* lock) { + if (SbMutexAcquire(&lock->mutex) != kSbMutexAcquired) { + OPENSSL_port_abort(); + } + lock->writing = false; + SbConditionVariableBroadcast(&lock->condition); + if (!SbMutexRelease(&lock->mutex)) { + OPENSSL_port_abort(); + } +} + +void CRYPTO_MUTEX_cleanup(CRYPTO_MUTEX* lock) { + if (!SbConditionVariableDestroy(&lock->condition)) { + OPENSSL_port_abort(); + } + if (!SbMutexDestroy(&lock->mutex)) { + OPENSSL_port_abort(); + } +} + +void CRYPTO_STATIC_MUTEX_lock_read(struct CRYPTO_STATIC_MUTEX* lock) { + EnsureInitialized(lock); + CRYPTO_MUTEX_lock_read(&lock->mutex); +} + +void CRYPTO_STATIC_MUTEX_lock_write(struct CRYPTO_STATIC_MUTEX* lock) { + EnsureInitialized(lock); + CRYPTO_MUTEX_lock_write(&lock->mutex); +} + +void CRYPTO_STATIC_MUTEX_unlock_read(struct CRYPTO_STATIC_MUTEX* lock) { + EnsureInitialized(lock); + CRYPTO_MUTEX_unlock_read(&lock->mutex); +} + +void CRYPTO_STATIC_MUTEX_unlock_write(struct CRYPTO_STATIC_MUTEX* lock) { + EnsureInitialized(lock); + CRYPTO_MUTEX_unlock_write(&lock->mutex); +} + +void* CRYPTO_get_thread_local(thread_local_data_t index) { + SbOnce(&g_thread_local_once_control, &ThreadLocalInit); + if (!SbThreadIsValidLocalKey(g_thread_local_key)) { + return nullptr; + } + + ThreadLocalEntry* thread_locals = static_cast<ThreadLocalEntry*>( + SbThreadGetLocalValue(g_thread_local_key)); + if (thread_locals == nullptr) { + return nullptr; + } + + return thread_locals[index].value; +} + +int CRYPTO_set_thread_local(thread_local_data_t index, void *value, + thread_local_destructor_t destructor) { + SbOnce(&g_thread_local_once_control, &ThreadLocalInit); + if (!SbThreadIsValidLocalKey(g_thread_local_key)) { + destructor(value); + return 0; + } + + ThreadLocalEntry* thread_locals = static_cast<ThreadLocalEntry*>( + SbThreadGetLocalValue(g_thread_local_key)); + if (thread_locals == nullptr) { + size_t thread_locals_size = + sizeof(ThreadLocalEntry) * NUM_OPENSSL_THREAD_LOCALS; + thread_locals = static_cast<ThreadLocalEntry*>( + OPENSSL_malloc(thread_locals_size)); + if (thread_locals == nullptr) { + destructor(value); + return 0; + } + OPENSSL_memset(thread_locals, 0, thread_locals_size); + if (!SbThreadSetLocalValue(g_thread_local_key, thread_locals)) { + OPENSSL_free(thread_locals); + destructor(value); + return 0; + } + } + + thread_locals[index].destructor = destructor; + thread_locals[index].value = value; + return 1; +} + +#endif // defined(STARBOARD)
diff --git a/src/third_party/boringssl/src/include/openssl/thread.h b/src/third_party/boringssl/src/include/openssl/thread.h index 98073b0..da3cdfa 100644 --- a/src/third_party/boringssl/src/include/openssl/thread.h +++ b/src/third_party/boringssl/src/include/openssl/thread.h
@@ -61,12 +61,29 @@ #include <openssl/base.h> +#include "starboard/atomic.h" +#include "starboard/condition_variable.h" +#include "starboard/mutex.h" + #if defined(__cplusplus) extern "C" { #endif -#if defined(OPENSSL_NO_THREADS) +#if defined(STARBOARD) +typedef struct crypto_mutex_st { + // It would be nice to use starboard::RWLock. However, that's a C++ class, so + // it can't even be included in this C header. It's possible to use an opaque + // pointer to it, but then an allocation would be needed or we somehow embed + // a byte array that is sizeof(starboard::RWLock) without including the + // declaration. Avoid the complication and just implement the RWMutex using + // starboard C structs. + SbMutex mutex; + SbConditionVariable condition; + size_t readers; + bool writing; +} CRYPTO_MUTEX; +#elif defined(OPENSSL_NO_THREADS) typedef struct crypto_mutex_st { char padding; // Empty structs have different sizes in C and C++. } CRYPTO_MUTEX; @@ -98,7 +115,11 @@ // as C code that might not set -std=c11. So, in practice, it's not possible to // do that. Instead we statically assert that the size and native alignment of // a plain uint32_t and an _Atomic uint32_t are equal in refcount_c11.c. +#if defined(STARBOARD) +typedef SbAtomic32 CRYPTO_refcount_t; +#else typedef uint32_t CRYPTO_refcount_t; +#endif // Deprecated functions.
diff --git a/src/third_party/icu/README.cobalt b/src/third_party/icu/README.cobalt new file mode 100644 index 0000000..cf85b3f --- /dev/null +++ b/src/third_party/icu/README.cobalt
@@ -0,0 +1,102 @@ +How to rebuild the ICU data files. + +This is based off of section B in the README.chromium file. + +1. First revert to the non-Starboardized version of ICU in the Cobalt source + tree. This is necessary because regenerating the data files requires building + ICU, and this is best done with a non-Starboardized version of the library. + + You can do this by looking at the git log for third_party/icu and tracing + it back until you find the first non-Cobalt change, and then checking out + that commit. + +2. Set ICU_ROOT to the directory of the ICU source code in the Cobalt source + tree, e.g. `$COBALT_SRC_ROOT/src/third_party/icu`. + +3. Create a build directory outside of the Cobalt codebase, and make that your + current working directory. Set ICU_DATA_ROOT to this directory. + +4. Configure the ICU build. Note that we setup our compiler defines in the same + way that they are set when building ICU within Cobalt, according to our + icu.gyp file. Note that below, `-DUCONFIG_NO_LEGACY_CONVERSION=1` is left + out on purpose even though it is used when building ICU for Cobalt because + it causes an issue when converting to big endian + ( https://unicode-org.atlassian.net/browse/ICU-11046 ). In addition, + `-DU_CHARSET_IS_UTF8=1` is also left out for the same reason as it was found + to produce a similar error. + + ``` + env CPPFLAGS="-DUCONFIG_ONLY_HTML_CONVERSION=1 -DUCONFIG_NO_TRANSLITERATION=1 -DUCONFIG_NO_COLLATION=1" $ICU_ROOT/source/runConfigureICU Linux --disable-layout + + ``` + +5. Run make. + + ``` + make -j8 + ``` + + Note that it's okay for it to end in an error around `css3transform.res`, + enough of it should have built successfully for us to complete the remaining + instructions. + +6. Revert your ICU source checkout back to the tip, there have been local + modifications to it (specifically `source/data/mappings/convrtrs.txt`) that + we want to pick up here. + + ``` + cd $ICU_ROOT + git checkout origin/COBALT + cd $ICU_DATA_ROOT + ``` + +7. Run `$ICU_ROOT/scripts/trim_data.sh` + +8. Run `$ICU_ROOT/android/patch_locale.sh`. + +9. Run `$ICU_ROOT/scripts/make_data.sh`. + +10. Run `$ICU_ROOT/scripts/clean_up_data_source.sh` to clean up the changes + made to $ICU_ROOT from the call to `patch_locale.sh`. + +11. Create a new directory where we will rebuild ICU with different options + because the options used above will produce a version of the tool `icupkg` ( + which we need to use to translate from little to big endian) that does not + work. Call this new directory $ICU_PKG_ROOT. + +12. Change directory to $ICU_PKG_ROOT. + +13. Run `$ICU_ROOT/source/runConfigureICU Linux --disable-layout && make -j8` + +14. Run `$ICU_ROOT/scripts/make_data.sh` + +15. Run `export LD_LIBRARY_PATH=$ICU_PKG_ROOT/lib` + +16. Run `sudo apt install icu-devtools` to obtain the `icupkg` command and its + dependencies. Even though you will be running a locally-built version of + `icupkg`, you will need the shared libraries installed by this command. + +17. Replace the files in this directory with the new files that you have built. + They will exist as a little-endian package file, but you can use the + `icupkg` tool to both unpack the files out of the package (which Cobalt + prefers), and switch from little-endian to big-endian. + + Run: + + ``` + cd $COBALT_SRC_ROOT/src/cobalt/content/icu + rm -rf * + mkdir icudt56l icudt56b + $ICU_PKG_ROOT/bin/icupkg -tl -x '*' -d icudt56l $ICU_DATA_ROOT/data/out/tmp/icudt56l.dat + $ICU_PKG_ROOT/bin/icupkg -tb -x '*' -d icudt56b $ICU_DATA_ROOT/data/out/tmp/icudt56l.dat + ``` + + +You should now have the ICU data files generated and ready to go in the Cobalt +source tree, and you can clean up any outstanding files. If there are any +leftover changes in your $ICU_ROOT directory, you can revert them. At this +point you can re-gyp, re-ninja, and run Cobalt and it should work. + +Note that at the time of this writing, the final resulting contents had a size +of 6.9MB, from running the command +`du -sh $COBALT_SRC_ROOT/src/cobalt/content/icu/icudt56l`.
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj deleted file mode 100644 index b4fddc6..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj +++ /dev/null
@@ -1,166 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{E1360C65-D375-4335-8057-7ED99CC3F9B2}</ProjectGuid> - <RootNamespace>obj_int_extract</RootNamespace> - <Keyword>ManagedCProj</Keyword> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>false</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>false</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> - <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Platform)\$(Configuration)\$(ProjectName)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;./build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <DebugInformationFormat>OldStyle</DebugInformationFormat> - </ClCompile> - <Link> - <OutputFile>obj_int_extract.exe</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <DebugInformationFormat>OldStyle</DebugInformationFormat> - </ClCompile> - <Link> - <OutputFile>obj_int_extract.exe</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>.;..;./build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DebugInformationFormat> - </DebugInformationFormat> - </ClCompile> - <Link> - <OutputFile>obj_int_extract.exe</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <Optimization>MaxSpeed</Optimization> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <AdditionalIncludeDirectories>.;..;./build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <DebugInformationFormat> - </DebugInformationFormat> - </ClCompile> - <Link> - <OutputFile>obj_int_extract.exe</OutputFile> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="make\obj_int_extract.c"> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName> - <ObjectFileName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)build_make_obj_int_extract.obj</ObjectFileName> - </ClCompile> - </ItemGroup> - <ItemGroup> - <None Include="obj_int_extract.bat" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj.filters deleted file mode 100644 index 93e8543..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-core/build/obj_int_extract.vcxproj.filters +++ /dev/null
@@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>4C149771-9F7E-4C2B-541A-6353828BEB52</UniqueIdentifier> - <Extensions>c;cc;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>05FD4944-2E7C-8CFC-0443-D6DAD06BE957</UniqueIdentifier> - <Extensions>h;hm;inl;inc;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>01A2776B-A9DA-4C36-2179-2D64860A04BF</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions> - </Filter> - <Filter Include="Build Files"> - <UniqueIdentifier>83458B37-ADD7-A5C2-40D2-5EB607F2C856</UniqueIdentifier> - <Extensions>mk</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="make\obj_int_extract.c"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <None Include="obj_int_extract.bat"> - <Filter>Source Files</Filter> - </None> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core - Copy.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core - Copy.vcxproj deleted file mode 100644 index e101eb4..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core - Copy.vcxproj +++ /dev/null
@@ -1,477 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}</ProjectGuid> - <RootNamespace>vpx</RootNamespace> - <Keyword>ManagedCProj</Keyword> - <ProjectName>vp9-dec-core</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings" /> - <ImportGroup Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.Development.props')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.Development.props')" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath> - <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - <IncludePath>$(IncludePath)</IncludePath> - <LibraryPath>$(LibraryPath)</LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath> - <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - <IncludePath>$(DXSDK_DIR)include;$(IncludePath)</IncludePath> - <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)ORBIS_Debug;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - <PSSL /> - <PSSL> - <Verbosity>Quiet</Verbosity> - </PSSL> - <PSSL> - <AuxData>Disabled</AuxData> - </PSSL> - <Compile_PSSL_To_Header /> - <Compile_PSSL_To_Header /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - <ProjectReference> - <LinkLibraryDependencies>true</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <WholeProgramOptimization>true</WholeProgramOptimization> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <WholeProgramOptimization>true</WholeProgramOptimization> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\decoder\interop\vp9lux_interop.c"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_alt_inter_ocl.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_dx_compute.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_dx_window.cpp"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_intra_ocl.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter_ocl.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_amd.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_programs.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_thread.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_transform_ocl.cpp" /> - <ClCompile Include="..\vpx\src\vpx_decoder.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_decoder.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_codec.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_codec.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_image.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_image.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_mem\vpx_mem.c"> - <ObjectFileName>$(IntDir)vpx_mem_vpx_mem.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\vpx_scale.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_vpx_scale.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\yv12config.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_yv12config.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\yv12extend.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_yv12extend.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\gen_scalers.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_gen_scalers.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c" /> - <ClCompile Include="..\vp9\common\vp9_blockd.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_blockd.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_debugmodes.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_debugmodes.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropy.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropy.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropymode.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropymode.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropymv.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropymv.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_pred_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_pred_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_prob.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_prob.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_rtcd.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_rtcd.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_scale.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_scale.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_seg_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_seg_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_thread.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_thread.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_tile_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_tile_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_loopfilter.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_mvref_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_mvref_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_quant_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_quant_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_common_data.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_common_data.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_scan.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_scan.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\vp9_dx_iface.c"> - <ObjectFileName>$(IntDir)vp9_vp9_dx_iface.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decodemv.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodemv.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodeframe.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_detokenize.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_detokenize.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_reader.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_reader.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_read_bit_buffer.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decoder.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decoder.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_dsubexp.obj</ObjectFileName> - </ClCompile> - <None Include="..\vpx.def" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\vp9\common\vp9lux_log.h" /> - <ClInclude Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.h" /> - <ClInclude Include="..\vp9\decoder\interop\vp9lux_interop.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_common.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_idct_base.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_inter_common.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_alt_inter_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_dx_compute.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_dx_window.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl_binary.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl_programs.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_thread.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_transform_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_types.h" /> - <ClInclude Include="..\vpx\vpx_decoder.h" /> - <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" /> - <ClInclude Include="..\vpx\vpx_codec.h" /> - <ClInclude Include="..\vpx\vpx_frame_buffer.h" /> - <ClInclude Include="..\vpx\vpx_hw_image.h" /> - <ClInclude Include="..\vpx\vpx_image.h" /> - <ClInclude Include="..\vpx\vpx_integer.h" /> - <ClInclude Include="..\vpx_mem\vpx_mem.h" /> - <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" /> - <ClInclude Include="..\vpx_scale\yv12config.h" /> - <ClInclude Include="..\vpx_scale\vpx_scale.h" /> - <ClInclude Include="..\vpx_ports\asm_offsets.h" /> - <ClInclude Include="..\vpx_ports\mem.h" /> - <ClInclude Include="..\vpx_ports\vpx_timer.h" /> - <ClInclude Include="..\vpx_ports\x86.h" /> - <ClInclude Include="..\vp9\vp9_iface_common.h" /> - <ClInclude Include="..\vp9\common\vp9_ppflags.h" /> - <ClInclude Include="..\vp9\common\vp9_filter.h" /> - <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" /> - <ClInclude Include="..\vp9\common\vp9_blockd.h" /> - <ClInclude Include="..\vp9\common\vp9_common.h" /> - <ClInclude Include="..\vp9\common\vp9_entropy.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymode.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymv.h" /> - <ClInclude Include="..\vp9\common\vp9_enums.h" /> - <ClInclude Include="..\vp9\common\vp9_loopfilter.h" /> - <ClInclude Include="..\vp9\common\vp9_mv.h" /> - <ClInclude Include="..\vp9\common\vp9_pred_common.h" /> - <ClInclude Include="..\vp9\common\vp9_prob.h" /> - <ClInclude Include="..\vp9\common\vp9_quant_common.h" /> - <ClInclude Include="..\vp9\common\vp9_scale.h" /> - <ClInclude Include="..\vp9\common\vp9_seg_common.h" /> - <ClInclude Include="..\vp9\common\vp9_systemdependent.h" /> - <ClInclude Include="..\vp9\common\vp9_textblit.h" /> - <ClInclude Include="..\vp9\common\vp9_thread.h" /> - <ClInclude Include="..\vp9\common\vp9_tile_common.h" /> - <ClInclude Include="..\vp9\common\vp9_mvref_common.h" /> - <ClInclude Include="..\vp9\common\vp9_common_data.h" /> - <ClInclude Include="..\vp9\common\vp9_scan.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dthread.h" /> - <ClInclude Include="..\vp9\decoder\vp9_reader.h" /> - <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" /> - <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decoder.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" /> - <ClInclude Include="..\vpx_ports\emmintrin_compat.h" /> - <ClInclude Include="..\vpx_ports\mem_ops.h" /> - <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" /> - <ClInclude Include="..\vpx_ports\vpx_once.h" /> - <ClInclude Include="..\vp9_rtcd.h" /> - <ClInclude Include="vpx_scale_rtcd.h" /> - </ItemGroup> - <ItemGroup> - <None Include="..\vpx\vpx_codec.mk" /> - </ItemGroup> - <ItemGroup> - <None Include="..\vp9\decoder\kernels\ps.hlsl"> - <FileType>Document</FileType> - </None> - <None Include="..\vp9\decoder\kernels\vs.hlsl"> - <FileType>Document</FileType> - </None> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_borders_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.Development.props')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.Development.props')" /> - <ImportGroup Label="ExtensionTargets" /> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj deleted file mode 100644 index 0e81043..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj +++ /dev/null
@@ -1,677 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}</ProjectGuid> - <RootNamespace>vpx</RootNamespace> - <Keyword>ManagedCProj</Keyword> - <ProjectName>vp9-dec-core</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v140</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>Clang</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - <Import Project="$(ProgramFiles)\SCE\ORBIS SDKs\3.500\host_tools\msbuild\SceShader.props" /> - <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <TargetName>$(ProjectName)</TargetName> - <GnmUseGnm>true</GnmUseGnm> - <GnmUseGnmx>true</GnmUseGnmx> - <GnmUseAddressLibrary>true</GnmUseAddressLibrary> - <GnmUseLibShaderBinary>true</GnmUseLibShaderBinary> - <GnmUseGNF>true</GnmUseGNF> - <GnmUseTextureTool>false</GnmUseTextureTool> - <GnmUsePM4Dump>true</GnmUsePM4Dump> - <GnmUseSampleCommon>false</GnmUseSampleCommon> - <GnmProjectType>SampleLib</GnmProjectType> - <OutDir>$(SolutionDir)lib\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <TargetName>$(ProjectName)$(PlatformArchitecture)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <TargetName>$(ProjectName)</TargetName> - <OutDir>$(SolutionDir)lib\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - <ProjectReference> - <LinkLibraryDependencies>true</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>LUXOFT_VP9_ENABLE_SCALING;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <GenerateDebugInformation>true</GenerateDebugInformation> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - <ProjectReference> - <LinkLibraryDependencies>true</LinkLibraryDependencies> - </ProjectReference> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <WholeProgramOptimization>true</WholeProgramOptimization> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories> - </AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command>cd ./script -call amd_build.bat</Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;$(ProjectDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>LUXOFT_VP9_ENABLE_SCALING;WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <OptimizationLevel>Level3</OptimizationLevel> - <GenerateDebugInformation>true</GenerateDebugInformation> - <LinkTimeOptimization>true</LinkTimeOptimization> - <NoStrictAliasing>true</NoStrictAliasing> - <UnrollLoops>false</UnrollLoops> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories> - <IgnoreAllDefaultLibraries>true</IgnoreAllDefaultLibraries> - </Lib> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\vp9\common\vp9_scale.c" /> - <ClCompile Include="..\vp9\common\vp9_scan.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_inter.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_intra.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_linear_allocator.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_dec.cpp"> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_gpu_mem_ps4.cpp"> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel> - <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">false</LinkTimeOptimization> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_gpu_programs.cpp" /> - <ClCompile Include="..\vp9\decoder\vp9lux_thread.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_transform.cpp" /> - <ClCompile Include="..\vpx\src\vpx_decoder.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_decoder.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_codec.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_codec.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_image.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_image.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_mem\vpx_mem.c"> - <ObjectFileName>$(IntDir)vpx_mem_vpx_mem.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\vpx_scale.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_vpx_scale.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\yv12config.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_yv12config.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\yv12extend.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_yv12extend.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\gen_scalers.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_gen_scalers.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_blockd.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_blockd.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_debugmodes.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_debugmodes.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropy.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropy.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropymode.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropymode.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropymv.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropymv.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_pred_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_pred_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_prob.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_prob.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_seg_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_seg_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_thread.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_thread.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_tile_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_tile_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_loopfilter.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter.obj</ObjectFileName> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_mvref_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_mvref_common.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_quant_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_quant_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_common_data.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_common_data.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\vp9_dx_iface.c"> - <ObjectFileName>$(IntDir)vp9_vp9_dx_iface.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - <LinkTimeOptimization Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">true</LinkTimeOptimization> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decodemv.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodemv.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Levels</OptimizationLevel> - <AdditionalOptions Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">-Wno-unused-function %(AdditionalOptions)</AdditionalOptions> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodeframe.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_detokenize.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_detokenize.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - <UnrollLoops Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">false</UnrollLoops> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_reader.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_reader.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_read_bit_buffer.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decoder.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decoder.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_dsubexp.obj</ObjectFileName> - <OptimizationLevel Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Level3</OptimizationLevel> - </ClCompile> - <None Include="..\vpx.def" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\vp9\common\vp9lux_log.h" /> - <ClInclude Include="..\vp9\common\vp9_onyxc_int.h" /> - <ClInclude Include="..\vp9\common\vp9_scale.h" /> - <ClInclude Include="..\vp9\common\vp9_scan.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_common.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_genblock_common.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_idct_base.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_inter_common.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_intra_common.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_lf_common.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_inter.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_intra.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_linear_allocator.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_dec.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_gpu_programs.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_thread.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_transform.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_types.h" /> - <ClInclude Include="..\vpx\vpx_decoder.h" /> - <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" /> - <ClInclude Include="..\vpx\vpx_codec.h" /> - <ClInclude Include="..\vpx\vpx_frame_buffer.h" /> - <ClInclude Include="..\vpx\vpx_hw_image.h" /> - <ClInclude Include="..\vpx\vpx_image.h" /> - <ClInclude Include="..\vpx\vpx_integer.h" /> - <ClInclude Include="..\vpx_mem\vpx_mem.h" /> - <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" /> - <ClInclude Include="..\vpx_scale\yv12config.h" /> - <ClInclude Include="..\vpx_scale\vpx_scale.h" /> - <ClInclude Include="..\vpx_ports\asm_offsets.h" /> - <ClInclude Include="..\vpx_ports\mem.h" /> - <ClInclude Include="..\vpx_ports\vpx_timer.h" /> - <ClInclude Include="..\vpx_ports\x86.h" /> - <ClInclude Include="..\vp9\common\vp9_ppflags.h" /> - <ClInclude Include="..\vp9\common\vp9_filter.h" /> - <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" /> - <ClInclude Include="..\vp9\common\vp9_blockd.h" /> - <ClInclude Include="..\vp9\common\vp9_common.h" /> - <ClInclude Include="..\vp9\common\vp9_entropy.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymode.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymv.h" /> - <ClInclude Include="..\vp9\common\vp9_enums.h" /> - <ClInclude Include="..\vp9\common\vp9_loopfilter.h" /> - <ClInclude Include="..\vp9\common\vp9_mv.h" /> - <ClInclude Include="..\vp9\common\vp9_pred_common.h" /> - <ClInclude Include="..\vp9\common\vp9_prob.h" /> - <ClInclude Include="..\vp9\common\vp9_quant_common.h" /> - <ClInclude Include="..\vp9\common\vp9_seg_common.h" /> - <ClInclude Include="..\vp9\common\vp9_systemdependent.h" /> - <ClInclude Include="..\vp9\common\vp9_textblit.h" /> - <ClInclude Include="..\vp9\common\vp9_thread.h" /> - <ClInclude Include="..\vp9\common\vp9_tile_common.h" /> - <ClInclude Include="..\vp9\common\vp9_mvref_common.h" /> - <ClInclude Include="..\vp9\common\vp9_common_data.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dthread.h" /> - <ClInclude Include="..\vp9\decoder\vp9_reader.h" /> - <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" /> - <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decoder.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" /> - <ClInclude Include="..\vpx_ports\emmintrin_compat.h" /> - <ClInclude Include="..\vpx_ports\mem_ops.h" /> - <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" /> - <ClInclude Include="vpx_scale_rtcd.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild> - </ClInclude> - </ItemGroup> - <ItemGroup> - <None Include="..\vpx\vpx_codec.mk" /> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_copy_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hor_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_ver_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_clear_block_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_lf_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_fillborder_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_hbd_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_copy_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_hor_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ver_hbd_c.pssl"> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">sce_cs_orbis</Profile> - <Profile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">sce_cs_orbis</Profile> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - <Import Project="$(ProgramFiles)\SCE\ORBIS SDKs\3.500\host_tools\msbuild\SceShader.targets" /> - <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.targets" /> - </ImportGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj.filters deleted file mode 100644 index 7622140..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-core.vcxproj.filters +++ /dev/null
@@ -1,294 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <ClCompile Include="..\vpx\src\vpx_decoder.c" /> - <ClCompile Include="..\vpx\src\vpx_codec.c" /> - <ClCompile Include="..\vpx\src\vpx_image.c" /> - <ClCompile Include="..\vpx_mem\vpx_mem.c" /> - <ClCompile Include="..\vpx_scale\generic\vpx_scale.c" /> - <ClCompile Include="..\vpx_scale\generic\yv12config.c" /> - <ClCompile Include="..\vpx_scale\generic\yv12extend.c" /> - <ClCompile Include="..\vpx_scale\generic\gen_scalers.c" /> - <ClCompile Include="..\vp9\common\vp9_blockd.c" /> - <ClCompile Include="..\vp9\common\vp9_debugmodes.c" /> - <ClCompile Include="..\vp9\common\vp9_entropy.c" /> - <ClCompile Include="..\vp9\common\vp9_entropymode.c" /> - <ClCompile Include="..\vp9\common\vp9_entropymv.c" /> - <ClCompile Include="..\vp9\common\vp9_pred_common.c" /> - <ClCompile Include="..\vp9\common\vp9_prob.c" /> - <ClCompile Include="..\vp9\common\vp9_scale.c" /> - <ClCompile Include="..\vp9\common\vp9_seg_common.c" /> - <ClCompile Include="..\vp9\common\vp9_thread.c" /> - <ClCompile Include="..\vp9\common\vp9_tile_common.c" /> - <ClCompile Include="..\vp9\common\vp9_loopfilter.c" /> - <ClCompile Include="..\vp9\common\vp9_mvref_common.c" /> - <ClCompile Include="..\vp9\common\vp9_quant_common.c" /> - <ClCompile Include="..\vp9\common\vp9_common_data.c" /> - <ClCompile Include="..\vp9\common\vp9_scan.c" /> - <ClCompile Include="..\vp9\vp9_dx_iface.c" /> - <ClCompile Include="..\vp9\decoder\vp9_decodemv.c" /> - <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c" /> - <ClCompile Include="..\vp9\decoder\vp9_detokenize.c" /> - <ClCompile Include="..\vp9\decoder\vp9_reader.c" /> - <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c" /> - <ClCompile Include="..\vp9\decoder\vp9_decoder.c" /> - <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_thread.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_inter.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_transform.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_gpu_programs.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_gpu_mem_ps4.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_dec.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_intra.cpp"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_linear_allocator.cpp"> - <Filter>lux</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\vpx\vpx_decoder.h" /> - <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" /> - <ClInclude Include="..\vpx\vpx_codec.h" /> - <ClInclude Include="..\vpx\vpx_frame_buffer.h" /> - <ClInclude Include="..\vpx\vpx_image.h" /> - <ClInclude Include="..\vpx\vpx_integer.h" /> - <ClInclude Include="..\vpx_mem\vpx_mem.h" /> - <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" /> - <ClInclude Include="..\vpx_scale\yv12config.h" /> - <ClInclude Include="..\vpx_scale\vpx_scale.h" /> - <ClInclude Include="..\vpx_ports\asm_offsets.h" /> - <ClInclude Include="..\vpx_ports\mem.h" /> - <ClInclude Include="..\vpx_ports\vpx_timer.h" /> - <ClInclude Include="..\vpx_ports\x86.h" /> - <ClInclude Include="..\vp9\common\vp9_ppflags.h" /> - <ClInclude Include="..\vp9\common\vp9_filter.h" /> - <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" /> - <ClInclude Include="..\vp9\common\vp9_blockd.h" /> - <ClInclude Include="..\vp9\common\vp9_common.h" /> - <ClInclude Include="..\vp9\common\vp9_entropy.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymode.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymv.h" /> - <ClInclude Include="..\vp9\common\vp9_enums.h" /> - <ClInclude Include="..\vp9\common\vp9_loopfilter.h" /> - <ClInclude Include="..\vp9\common\vp9_mv.h" /> - <ClInclude Include="..\vp9\common\vp9_pred_common.h" /> - <ClInclude Include="..\vp9\common\vp9_prob.h" /> - <ClInclude Include="..\vp9\common\vp9_quant_common.h" /> - <ClInclude Include="..\vp9\common\vp9_scale.h" /> - <ClInclude Include="..\vp9\common\vp9_seg_common.h" /> - <ClInclude Include="..\vp9\common\vp9_systemdependent.h" /> - <ClInclude Include="..\vp9\common\vp9_textblit.h" /> - <ClInclude Include="..\vp9\common\vp9_thread.h" /> - <ClInclude Include="..\vp9\common\vp9_tile_common.h" /> - <ClInclude Include="..\vp9\common\vp9_mvref_common.h" /> - <ClInclude Include="..\vp9\common\vp9_common_data.h" /> - <ClInclude Include="..\vp9\common\vp9_scan.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dthread.h" /> - <ClInclude Include="..\vp9\decoder\vp9_reader.h" /> - <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" /> - <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decoder.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" /> - <ClInclude Include="..\vpx_ports\emmintrin_compat.h" /> - <ClInclude Include="..\vpx_ports\mem_ops.h" /> - <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_types.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\common\vp9lux_log.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_thread.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="vpx_scale_rtcd.h" /> - <ClInclude Include="..\vpx\vpx_hw_image.h" /> - <ClInclude Include="..\vp9\decoder\kernels\pssl_common.h"> - <Filter>lux\kernels</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\kernels\pssl_idct_base.h"> - <Filter>lux\kernels</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\kernels\pssl_inter_common.h"> - <Filter>lux\kernels</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_inter.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_transform.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_gpu_programs.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_dec.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_intra.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\common\vp9_onyxc_int.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_linear_allocator.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\kernels\pssl_intra_common.h"> - <Filter>lux\kernels</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\kernels\pssl_genblock_common.h"> - <Filter>lux\kernels</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\kernels\pssl_lf_common.h"> - <Filter>lux\kernels</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <None Include="..\vpx.def" /> - <None Include="..\vpx\vpx_codec.mk" /> - </ItemGroup> - <ItemGroup> - <Filter Include="lux"> - <UniqueIdentifier>{9c8917ac-b928-40c6-b3e4-6014d514ece6}</UniqueIdentifier> - </Filter> - <Filter Include="lux\kernels"> - <UniqueIdentifier>{7e8d8f3b-6882-4b26-a6a1-9d61b33b1f82}</UniqueIdentifier> - </Filter> - <Filter Include="asm"> - <UniqueIdentifier>{6c274781-a394-48cf-baf1-485def749ece}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_copy_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_ver_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hor_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\gen_blocks_lf_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_clear_block_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4full_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_4x4lossless_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_8x8full_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_16x16full_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\idct_32x32full_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_main_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\intra_fillborder_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_main_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_compound_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_copy_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ext_borders_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_hor_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_compound_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_resize_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\inter_ver_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="..\vp9\decoder\kernels\lf_hbd_c.pssl"> - <Filter>lux\kernels</Filter> - </Compile_PSSL_To_Header> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj deleted file mode 100644 index 049a40b..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj +++ /dev/null
@@ -1,507 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}</ProjectGuid> - <RootNamespace>vpx</RootNamespace> - <Keyword>ManagedCProj</Keyword> - <ProjectName>vp9-dec-core</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <WholeProgramOptimization>true</WholeProgramOptimization> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <OutDir>$(SolutionDir)$(Platform)\$(Configuration)\</OutDir> - <IntDir>$(Platform)\$(Configuration)\vpx\</IntDir> - <TargetName>$(ProjectName)</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <PreBuildEvent> - <Command>call obj_int_extract.bat .. build_$(Platform)</Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>AMD_DX_INTEROP;ENABLE_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <PreBuildEvent> - <Command> - </Command> - </PreBuildEvent> - <ClCompile> - <Optimization>Disabled</Optimization> - <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>AMD_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;_DEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <PreBuildEvent> - <Command>call obj_int_extract.bat .. build_$(Platform) -cd ./script -call mclBuild.bat</Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>AMD_DX_INTEROP;ENABLE_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - <WholeProgramOptimization>true</WholeProgramOptimization> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <PreBuildEvent> - <Command>call obj_int_extract.bat .. build_$(Platform) -cd ./script -call mclBuild.bat</Command> - </PreBuildEvent> - <ClCompile> - <FavorSizeOrSpeed>Speed</FavorSizeOrSpeed> - <Optimization>MaxSpeed</Optimization> - <AdditionalIncludeDirectories>.;..;$(AMDAPPSDKROOT)\include;$(ProjectDir)build_$(Platform);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <PreprocessorDefinitions>AMD_DX_INTEROP;_LUXWIN32;ALT_INTER_OCL;WIN32;NDEBUG;_CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> - <WarningLevel>Level3</WarningLevel> - </ClCompile> - <Lib> - <AdditionalLibraryDirectories>$(AMDAPPSDKROOT)\lib\x86_64;</AdditionalLibraryDirectories> - </Lib> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.c" /> - <ClCompile Include="..\vp9\decoder\interop\vp9lux_interop.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_alt_inter_ocl.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_inter_ocl.c"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_intra_ocl.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter_ocl.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_mem_cuda.c"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_amd.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_generic.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_programs.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_reconinter_cl.c"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_thread.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_transform_ocl.c" /> - <ClCompile Include="..\vpx\src\vpx_decoder.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_decoder.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_encoder.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_encoder.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_codec.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_codec.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_image.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_image.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx\src\vpx_psnr.c"> - <ObjectFileName>$(IntDir)vpx_src_vpx_psnr.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_mem\vpx_mem.c"> - <ObjectFileName>$(IntDir)vpx_mem_vpx_mem.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\vpx_scale.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_vpx_scale.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\yv12config.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_yv12config.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\yv12extend.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_yv12extend.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\generic\gen_scalers.c"> - <ObjectFileName>$(IntDir)vpx_scale_generic_gen_scalers.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\vpx_scale_asm_offsets.c"> - <ObjectFileName>$(IntDir)vpx_scale_vpx_scale_asm_offsets.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c"> - <ObjectFileName>$(IntDir)vpx_scale_vpx_scale_rtcd.obj</ObjectFileName> - </ClCompile> - <CustomBuild Include="..\vpx_ports\emms.asm"> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vpx_ports_emms_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vpx_ports_emms_asm.obj</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vpx_ports_emms_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vpx_ports_emms_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vpx_ports_emms_asm.obj</Outputs> - <FileType>Document</FileType> - </CustomBuild> - <ClCompile Include="..\vp9\common\vp9_alloccommon.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_alloccommon.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_blockd.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_blockd.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_convolve.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_convolve.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_debugmodes.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_debugmodes.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropy.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropy.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropymode.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropymode.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_entropymv.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_entropymv.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_filter.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_filter.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_frame_buffers.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_frame_buffers.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_idct.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_idct.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_pred_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_pred_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_prob.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_prob.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_rtcd.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_rtcd.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_scale.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_scale.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_seg_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_seg_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_thread.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_thread.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_tile_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_tile_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_loopfilter.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_loopfilter_filters.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_loopfilter_filters.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_mvref_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_mvref_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_quant_common.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_quant_common.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_reconinter.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_reconinter.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_reconintra.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_reconintra.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_common_data.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_common_data.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\vp9_scan.c"> - <ObjectFileName>$(IntDir)vp9_common_vp9_scan.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\x86\vp9_asm_stubs.c"> - <ObjectFileName>$(IntDir)vp9_common_x86_vp9_asm_stubs.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\x86\vp9_loopfilter_intrin_sse2.c"> - <ObjectFileName>$(IntDir)vp9_common_x86_vp9_loopfilter_intrin_sse2.obj</ObjectFileName> - </ClCompile> - <CustomBuild Include="..\vp9\common\x86\vp9_loopfilter_mmx.asm"> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_loopfilter_mmx_asm.obj</Outputs> - <FileType>Document</FileType> - </CustomBuild> - <ClCompile Include="..\vp9\common\x86\vp9_subpixel_8t_intrin_ssse3.c"> - <ObjectFileName>$(IntDir)vp9_common_x86_vp9_subpixel_8t_intrin_ssse3.obj</ObjectFileName> - </ClCompile> - <CustomBuild Include="..\vp9\common\x86\vp9_copy_sse2.asm"> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_copy_sse2_asm.obj</Outputs> - <FileType>Document</FileType> - </CustomBuild> - <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_sse2.asm"> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_sse2_asm.obj</Outputs> - <FileType>Document</FileType> - </CustomBuild> - <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_ssse3.asm"> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\yasm\yasm.exe -Xvc -g cv8 -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Assembling %(Filename)%(Extension)</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Assembling %(Filename)%(Extension)</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\yasm\yasm.exe -Xvc -f $(Platform) -I. -I.. -I $(ProjectDir)build_$(Platform) "%(FullPath)" -o $(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(IntDir)vp9_common_x86_vp9_intrapred_ssse3_asm.obj</Outputs> - <FileType>Document</FileType> - </CustomBuild> - <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_sse2.c"> - <ObjectFileName>$(IntDir)vp9_common_x86_vp9_idct_intrin_sse2.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_ssse3.c"> - <ObjectFileName>$(IntDir)vp9_common_x86_vp9_idct_intrin_ssse3.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\vp9_dx_iface.c"> - <ObjectFileName>$(IntDir)vp9_vp9_dx_iface.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decodemv.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodemv.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decodeframe.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_detokenize.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_detokenize.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_dthread.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_dthread.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_reader.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_reader.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_read_bit_buffer.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_decoder.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_decoder.obj</ObjectFileName> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c"> - <ObjectFileName>$(IntDir)vp9_decoder_vp9_dsubexp.obj</ObjectFileName> - </ClCompile> - <None Include="..\vp9\decoder\kernels\altinter.cl" /> - <None Include="..\vp9\decoder\kernels\altinter_intel.cl" /> - <None Include="..\vp9\decoder\kernels\alttransform.cl" /> - <None Include="..\vp9\decoder\kernels\fastinterpred8x8kernel.cl" /> - <None Include="..\vp9\decoder\kernels\interpred8x8kernel.cl" /> - <None Include="..\vp9\decoder\kernels\intra.cl" /> - <None Include="..\vp9\decoder\kernels\intra_intel.cl" /> - <None Include="..\vp9\decoder\kernels\loopfilter.cl" /> - <None Include="..\vp9\decoder\kernels\loopfilter_intel.cl" /> - <None Include="..\vp9\decoder\kernels\transform.cl" /> - <None Include="..\vpx.def" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\vp9\common\vp9lux_log.h" /> - <ClInclude Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.h" /> - <ClInclude Include="..\vp9\decoder\interop\vp9lux_interop.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_alt_inter_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_frame_struct.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_inter_ocl.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl_binary.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl_programs.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_reconinter_cl.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_thread.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_transform_ocl.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_types.h" /> - <ClInclude Include="..\vpx\vpx_decoder.h" /> - <ClInclude Include="..\vpx\vpx_encoder.h" /> - <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" /> - <ClInclude Include="..\vpx\internal\vpx_psnr.h" /> - <ClInclude Include="..\vpx\vpx_codec.h" /> - <ClInclude Include="..\vpx\vpx_frame_buffer.h" /> - <ClInclude Include="..\vpx\vpx_image.h" /> - <ClInclude Include="..\vpx\vpx_integer.h" /> - <ClInclude Include="..\vpx_mem\vpx_mem.h" /> - <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" /> - <ClInclude Include="..\vpx_scale\yv12config.h" /> - <ClInclude Include="..\vpx_scale\vpx_scale.h" /> - <ClInclude Include="..\vpx_ports\asm_offsets.h" /> - <ClInclude Include="..\vpx_ports\mem.h" /> - <ClInclude Include="..\vpx_ports\vpx_timer.h" /> - <ClInclude Include="..\vpx_ports\x86.h" /> - <ClInclude Include="..\vp9\vp9_iface_common.h" /> - <ClInclude Include="..\vp9\common\vp9_ppflags.h" /> - <ClInclude Include="..\vp9\common\vp9_convolve.h" /> - <ClInclude Include="..\vp9\common\vp9_filter.h" /> - <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" /> - <ClInclude Include="..\vp9\common\vp9_alloccommon.h" /> - <ClInclude Include="..\vp9\common\vp9_blockd.h" /> - <ClInclude Include="..\vp9\common\vp9_common.h" /> - <ClInclude Include="..\vp9\common\vp9_entropy.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymode.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymv.h" /> - <ClInclude Include="..\vp9\common\vp9_enums.h" /> - <ClInclude Include="..\vp9\common\vp9_idct.h" /> - <ClInclude Include="..\vp9\common\vp9_loopfilter.h" /> - <ClInclude Include="..\vp9\common\vp9_mv.h" /> - <ClInclude Include="..\vp9\common\vp9_pred_common.h" /> - <ClInclude Include="..\vp9\common\vp9_prob.h" /> - <ClInclude Include="..\vp9\common\vp9_quant_common.h" /> - <ClInclude Include="..\vp9\common\vp9_reconinter.h" /> - <ClInclude Include="..\vp9\common\vp9_reconintra.h" /> - <ClInclude Include="..\vp9\common\vp9_scale.h" /> - <ClInclude Include="..\vp9\common\vp9_seg_common.h" /> - <ClInclude Include="..\vp9\common\vp9_systemdependent.h" /> - <ClInclude Include="..\vp9\common\vp9_textblit.h" /> - <ClInclude Include="..\vp9\common\vp9_thread.h" /> - <ClInclude Include="..\vp9\common\vp9_tile_common.h" /> - <ClInclude Include="..\vp9\common\vp9_mvref_common.h" /> - <ClInclude Include="..\vp9\common\vp9_common_data.h" /> - <ClInclude Include="..\vp9\common\vp9_scan.h" /> - <ClInclude Include="..\vp9\common\x86\vp9_idct_intrin_sse2.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dthread.h" /> - <ClInclude Include="..\vp9\decoder\vp9_reader.h" /> - <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" /> - <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decoder.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" /> - <ClInclude Include="..\vpx_ports\emmintrin_compat.h" /> - <ClInclude Include="..\vpx_ports\mem_ops.h" /> - <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" /> - <ClInclude Include="..\vpx_ports\vpx_once.h" /> - <ClInclude Include="..\vpx_scale_rtcd.h" /> - <ClInclude Include="..\vp9_rtcd.h" /> - </ItemGroup> - <ItemGroup> - <None Include="..\vpx\vpx_codec.mk" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj.filters deleted file mode 100644 index be08b3e..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-core/build/vpx-dec-coreVS13.vcxproj.filters +++ /dev/null
@@ -1,276 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <ClCompile Include="..\vpx\src\vpx_decoder.c" /> - <ClCompile Include="..\vpx\src\vpx_encoder.c" /> - <ClCompile Include="..\vpx\src\vpx_codec.c" /> - <ClCompile Include="..\vpx\src\vpx_image.c" /> - <ClCompile Include="..\vpx\src\vpx_psnr.c" /> - <ClCompile Include="..\vpx_mem\vpx_mem.c" /> - <ClCompile Include="..\vpx_scale\generic\vpx_scale.c" /> - <ClCompile Include="..\vpx_scale\generic\yv12config.c" /> - <ClCompile Include="..\vpx_scale\generic\yv12extend.c" /> - <ClCompile Include="..\vpx_scale\generic\gen_scalers.c" /> - <ClCompile Include="..\vpx_scale\vpx_scale_asm_offsets.c" /> - <ClCompile Include="..\vpx_scale\vpx_scale_rtcd.c" /> - <ClCompile Include="..\vp9\common\vp9_alloccommon.c" /> - <ClCompile Include="..\vp9\common\vp9_blockd.c" /> - <ClCompile Include="..\vp9\common\vp9_convolve.c" /> - <ClCompile Include="..\vp9\common\vp9_debugmodes.c" /> - <ClCompile Include="..\vp9\common\vp9_entropy.c" /> - <ClCompile Include="..\vp9\common\vp9_entropymode.c" /> - <ClCompile Include="..\vp9\common\vp9_entropymv.c" /> - <ClCompile Include="..\vp9\common\vp9_filter.c" /> - <ClCompile Include="..\vp9\common\vp9_frame_buffers.c" /> - <ClCompile Include="..\vp9\common\vp9_idct.c" /> - <ClCompile Include="..\vp9\common\vp9_pred_common.c" /> - <ClCompile Include="..\vp9\common\vp9_prob.c" /> - <ClCompile Include="..\vp9\common\vp9_rtcd.c" /> - <ClCompile Include="..\vp9\common\vp9_scale.c" /> - <ClCompile Include="..\vp9\common\vp9_seg_common.c" /> - <ClCompile Include="..\vp9\common\vp9_thread.c" /> - <ClCompile Include="..\vp9\common\vp9_tile_common.c" /> - <ClCompile Include="..\vp9\common\vp9_loopfilter.c" /> - <ClCompile Include="..\vp9\common\vp9_loopfilter_filters.c" /> - <ClCompile Include="..\vp9\common\vp9_mvref_common.c" /> - <ClCompile Include="..\vp9\common\vp9_quant_common.c" /> - <ClCompile Include="..\vp9\common\vp9_reconinter.c" /> - <ClCompile Include="..\vp9\common\vp9_reconintra.c" /> - <ClCompile Include="..\vp9\common\vp9_common_data.c" /> - <ClCompile Include="..\vp9\common\vp9_scan.c" /> - <ClCompile Include="..\vp9\common\x86\vp9_asm_stubs.c" /> - <ClCompile Include="..\vp9\common\x86\vp9_loopfilter_intrin_sse2.c" /> - <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_sse2.c" /> - <ClCompile Include="..\vp9\common\x86\vp9_idct_intrin_ssse3.c" /> - <ClCompile Include="..\vp9\vp9_dx_iface.c" /> - <ClCompile Include="..\vp9\decoder\vp9_decodemv.c" /> - <ClCompile Include="..\vp9\decoder\vp9_decodeframe.c" /> - <ClCompile Include="..\vp9\decoder\vp9_detokenize.c" /> - <ClCompile Include="..\vp9\decoder\vp9_dthread.c" /> - <ClCompile Include="..\vp9\decoder\vp9_reader.c" /> - <ClCompile Include="..\vp9\decoder\vp9_read_bit_buffer.c" /> - <ClCompile Include="..\vp9\decoder\vp9_decoder.c" /> - <ClCompile Include="..\vp9\decoder\vp9_dsubexp.c" /> - <ClCompile Include="..\vp9\decoder\vp9lux_alt_inter_ocl.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_decode_block.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_inter_ocl.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\interop\vp9lux_interop.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_intra_ocl.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_loopfilter_ocl.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_mem_cuda.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_amd.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_mem_generic.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_ocl_programs.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_reconinter_cl.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_thread.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\decoder\vp9lux_transform_ocl.c"> - <Filter>lux</Filter> - </ClCompile> - <ClCompile Include="..\vp9\common\x86\vp9_subpixel_8t_intrin_ssse3.c" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\vpx\vpx_decoder.h" /> - <ClInclude Include="..\vpx\vpx_encoder.h" /> - <ClInclude Include="..\vpx\internal\vpx_codec_internal.h" /> - <ClInclude Include="..\vpx\internal\vpx_psnr.h" /> - <ClInclude Include="..\vpx\vpx_codec.h" /> - <ClInclude Include="..\vpx\vpx_frame_buffer.h" /> - <ClInclude Include="..\vpx\vpx_image.h" /> - <ClInclude Include="..\vpx\vpx_integer.h" /> - <ClInclude Include="..\vpx_mem\vpx_mem.h" /> - <ClInclude Include="..\vpx_mem\include\vpx_mem_intrnl.h" /> - <ClInclude Include="..\vpx_scale\yv12config.h" /> - <ClInclude Include="..\vpx_scale\vpx_scale.h" /> - <ClInclude Include="..\vpx_ports\asm_offsets.h" /> - <ClInclude Include="..\vpx_ports\mem.h" /> - <ClInclude Include="..\vpx_ports\vpx_timer.h" /> - <ClInclude Include="..\vpx_ports\x86.h" /> - <ClInclude Include="..\vp9\vp9_iface_common.h" /> - <ClInclude Include="..\vp9\common\vp9_ppflags.h" /> - <ClInclude Include="..\vp9\common\vp9_convolve.h" /> - <ClInclude Include="..\vp9\common\vp9_filter.h" /> - <ClInclude Include="..\vp9\common\vp9_frame_buffers.h" /> - <ClInclude Include="..\vp9\common\vp9_alloccommon.h" /> - <ClInclude Include="..\vp9\common\vp9_blockd.h" /> - <ClInclude Include="..\vp9\common\vp9_common.h" /> - <ClInclude Include="..\vp9\common\vp9_entropy.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymode.h" /> - <ClInclude Include="..\vp9\common\vp9_entropymv.h" /> - <ClInclude Include="..\vp9\common\vp9_enums.h" /> - <ClInclude Include="..\vp9\common\vp9_idct.h" /> - <ClInclude Include="..\vp9\common\vp9_loopfilter.h" /> - <ClInclude Include="..\vp9\common\vp9_mv.h" /> - <ClInclude Include="..\vp9\common\vp9_pred_common.h" /> - <ClInclude Include="..\vp9\common\vp9_prob.h" /> - <ClInclude Include="..\vp9\common\vp9_quant_common.h" /> - <ClInclude Include="..\vp9\common\vp9_reconinter.h" /> - <ClInclude Include="..\vp9\common\vp9_reconintra.h" /> - <ClInclude Include="..\vp9\common\vp9_scale.h" /> - <ClInclude Include="..\vp9\common\vp9_seg_common.h" /> - <ClInclude Include="..\vp9\common\vp9_systemdependent.h" /> - <ClInclude Include="..\vp9\common\vp9_textblit.h" /> - <ClInclude Include="..\vp9\common\vp9_thread.h" /> - <ClInclude Include="..\vp9\common\vp9_tile_common.h" /> - <ClInclude Include="..\vp9\common\vp9_mvref_common.h" /> - <ClInclude Include="..\vp9\common\vp9_common_data.h" /> - <ClInclude Include="..\vp9\common\vp9_scan.h" /> - <ClInclude Include="..\vp9\common\x86\vp9_idct_intrin_sse2.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodeframe.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dthread.h" /> - <ClInclude Include="..\vp9\decoder\vp9_reader.h" /> - <ClInclude Include="..\vp9\decoder\vp9_read_bit_buffer.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decodemv.h" /> - <ClInclude Include="..\vp9\decoder\vp9_detokenize.h" /> - <ClInclude Include="..\vp9\decoder\vp9_decoder.h" /> - <ClInclude Include="..\vp9\decoder\vp9_dsubexp.h" /> - <ClInclude Include="..\vpx_ports\emmintrin_compat.h" /> - <ClInclude Include="..\vpx_ports\mem_ops.h" /> - <ClInclude Include="..\vpx_ports\mem_ops_aligned.h" /> - <ClInclude Include="..\vpx_ports\vpx_once.h" /> - <ClInclude Include="..\vpx_scale_rtcd.h" /> - <ClInclude Include="..\vp9_rtcd.h" /> - <ClInclude Include="..\vp9\decoder\vp9lux_types.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_alt_inter_ocl.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\interop\vp9lux_cl_wrapper.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_decode_block.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_frame_struct.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_inter_ocl.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\interop\vp9lux_interop.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_modes_table_binary.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_intra_ocl.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\common\vp9lux_log.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_loopfilter_ocl.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl_binary.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_ocl_programs.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_reconinter_cl.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_thread.h"> - <Filter>lux</Filter> - </ClInclude> - <ClInclude Include="..\vp9\decoder\vp9lux_transform_ocl.h"> - <Filter>lux</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <None Include="..\vpx.def" /> - <None Include="..\vpx\vpx_codec.mk" /> - <None Include="..\vp9\decoder\kernels\altinter.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\altinter_intel.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\alttransform.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\interpred8x8kernel.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\intra.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\intra_intel.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\loopfilter.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\loopfilter_intel.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\fastinterpred8x8kernel.cl"> - <Filter>lux\kernels</Filter> - </None> - <None Include="..\vp9\decoder\kernels\transform.cl"> - <Filter>lux\kernels</Filter> - </None> - </ItemGroup> - <ItemGroup> - <Filter Include="lux"> - <UniqueIdentifier>{9c8917ac-b928-40c6-b3e4-6014d514ece6}</UniqueIdentifier> - </Filter> - <Filter Include="lux\kernels"> - <UniqueIdentifier>{7e8d8f3b-6882-4b26-a6a1-9d61b33b1f82}</UniqueIdentifier> - </Filter> - <Filter Include="asm"> - <UniqueIdentifier>{6c274781-a394-48cf-baf1-485def749ece}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="..\vpx_ports\emms.asm"> - <Filter>asm</Filter> - </CustomBuild> - <CustomBuild Include="..\vp9\common\x86\vp9_loopfilter_mmx.asm"> - <Filter>asm</Filter> - </CustomBuild> - <CustomBuild Include="..\vp9\common\x86\vp9_copy_sse2.asm"> - <Filter>asm</Filter> - </CustomBuild> - <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_sse2.asm"> - <Filter>asm</Filter> - </CustomBuild> - <CustomBuild Include="..\vp9\common\x86\vp9_intrapred_ssse3.asm"> - <Filter>asm</Filter> - </CustomBuild> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj deleted file mode 100644 index d676550..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj +++ /dev/null
@@ -1,102 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCTargetsPath Condition="'$(VCTargetsPath12)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''">$(VCTargetsPath12)</VCTargetsPath> - <ProjectGuid>{F216E2AC-3265-4071-9F17-709D747FF1D1}</ProjectGuid> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <PropertyGroup Condition="'$(DebuggerFlavor)'=='ORBISDebugger'" Label="OverrideDebuggerDefaults"> - <!--LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand--> - <!--LocalDebuggerCommandArguments></LocalDebuggerCommandArguments--> - <!--LocalDebuggerTarget></LocalDebuggerTarget--> - <!--LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory--> - <!--LocalRunCommandLine></LocalRunCommandLine--> - </PropertyGroup> - <ImportGroup Label="ExtensionSettings"> - <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.props" /> - <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions);</PreprocessorDefinitions> - <GenerateDebugInformation>true</GenerateDebugInformation> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <AdditionalIncludeDirectories>../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions);</PreprocessorDefinitions> - <OptimizationLevel>Level2</OptimizationLevel> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <AdditionalIncludeDirectories>../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <GenerateDebugInformation>true</GenerateDebugInformation> - </ClCompile> - <Link> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc" /> - <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc" /> - <ClCompile Include="..\vpxdec\webmdec.cc" /> - <ClCompile Include="errors_main.cpp" /> - <ClCompile Include="user_malloc.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\libwebm\mkvparser\mkvparser.h" /> - <ClInclude Include="..\libwebm\mkvparser\mkvreader.h" /> - <ClInclude Include="ivf_video_source.h" /> - <ClInclude Include="video_source.h" /> - <ClInclude Include="webm_video_source.h" /> - </ItemGroup> - <Import Condition="'$(ConfigurationType)' == 'Makefile' and Exists('$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets')" Project="$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.targets" /> - <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.targets" /> - </ImportGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj.filters deleted file mode 100644 index d9ee00d..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/ErrorResilienceTest/ErrorResilienceTest.vcxproj.filters +++ /dev/null
@@ -1,47 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cxx;cc;s;asm</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hpp</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="errors_main.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\vpxdec\webmdec.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="user_malloc.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="ivf_video_source.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="video_source.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="webm_video_source.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvparser\mkvparser.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvparser\mkvreader.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.sln b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.sln deleted file mode 100644 index 14f4a95..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.sln +++ /dev/null
@@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.40629.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libSceSampleUtil", "libSceSampleUtil.vcxproj", "{30A1B994-C2C6-485F-911B-FB4674366DA8}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|ORBIS = Debug|ORBIS - Release|ORBIS = Release|ORBIS - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.Build.0 = Debug|ORBIS - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.ActiveCfg = Release|ORBIS - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.Build.0 = Release|ORBIS - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj deleted file mode 100644 index edeb2e5..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj +++ /dev/null
@@ -1,1301 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{30A1B994-C2C6-485F-911B-FB4674366DA8}</ProjectGuid> - <ProjectName>libSceSampleUtil</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup /> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_DEBUG;SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <GenerateDebugInformation>true</GenerateDebugInformation> -<AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalOptions>-frtti -Wno-unknown-pragmas -Wnull-conversion %(AdditionalOptions)</AdditionalOptions> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Lib> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - </Lib> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PreprocessorDefinitions>_DEBUG;SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;SCE_SAMPLE_UTIL_BUILD;SCE_DBG_LOGGING_ENABLED=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;$(SCE_PSP2_SDK_DIR)\target\include_common;$(CG_INC_PATH);$(SCE_PSP2_SDK_DIR)\host_tools\include;$(SCE_ORBIS_SDK_DIR)\host_tools\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> - </ClCompile> - <Lib> - <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> - </Lib> - <Link> - <AdditionalLibraryDirectories>$(CG_LIB64_PATH);$(SCE_ORBIS_SDK_DIR)\host_tools\lib;$(SCE_ORBIS_SAMPLE_DIR)\sample_code\common\lib.x64\external;$(SCE_PSP2_SDK_DIR)\host_tools\lib.x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>tinyxml.lib;%(AdditionalDependencies)</AdditionalDependencies> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;SCE_SAMPLE_UTIL_RELEASE=1;_UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <OptimizationLevel>Level2</OptimizationLevel> -<AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <AdditionalOptions>-frtti -Wno-unknown-pragmas %(AdditionalOptions)</AdditionalOptions> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - <Warnings>MoreWarnings</Warnings> - <GenerateDebugInformation>true</GenerateDebugInformation> - </ClCompile> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <PreprocessorDefinitions>SCE_SAMPLE_UTIL_ASSERTS_ENABLED=1;SCE_SAMPLE_UTIL_BUILD;SCE_DBG_LOGGING_ENABLED=0;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <OptimizationLevel>Level2</OptimizationLevel> - <AdditionalIncludeDirectories>$(ProjectDir)\..\..\include;$(ProjectDir)\..\..\include\external\tinyxml;$(ProjectDir)\..\sampleutil;$(SCE_PSP2_SDK_DIR)\target\include_common;$(CG_INC_PATH);$(SCE_PSP2_SDK_DIR)\host_tools\include;$(SCE_ORBIS_SDK_DIR)\host_tools\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <MultiProcessorCompilation>true</MultiProcessorCompilation> - </ClCompile> - <Link> - <AdditionalLibraryDirectories>$(CG_LIB64_PATH);$(SCE_ORBIS_SDK_DIR)\host_tools\lib;$(SCE_ORBIS_SAMPLE_DIR)\sample_code\common\lib.x64\external;$(SCE_PSP2_SDK_DIR)\host_tools\lib.x64;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> - <AdditionalDependencies>tinyxml.lib;%(AdditionalDependencies)</AdditionalDependencies> - <GenerateDebugInformation>true</GenerateDebugInformation> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClInclude Include="..\..\include\sampleutil.h" /> - <ClInclude Include="..\..\include\sampleutil\audio.h" /> - <ClInclude Include="..\..\include\sampleutil\audio\context.h" /> - <ClInclude Include="..\..\include\sampleutil\audio\data.h" /> - <ClInclude Include="..\..\include\sampleutil\audio\voice.h" /> - <ClInclude Include="..\..\include\sampleutil\debug\console.h" /> - <ClInclude Include="..\..\include\sampleutil\debug\menu.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\buffer.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\collada.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_animation.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_base.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_effect.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_geometry.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_image.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_scene.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\constant.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\context.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\effect.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\font.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\loader.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\platform.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\platform_dx11\platform_dx11.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\platform_gnm\platform_gnm.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\platform_gxm\platform_gxm.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\program.h" /> - <ClInclude Include="..\..\include\sampleutil\graphics\sprite.h" /> - <ClInclude Include="..\..\include\sampleutil\input.h" /> - <ClInclude Include="..\..\include\sampleutil\input\controller.h" /> - <ClInclude Include="..\..\include\sampleutil\input\motion.h" /> - <ClInclude Include="..\..\include\sampleutil\input\touch.h" /> - <ClInclude Include="..\..\include\sampleutil\sampleutil_common.h" /> - <ClInclude Include="..\..\include\sampleutil\sampleutil_error.h" /> - <ClInclude Include="..\..\include\sampleutil\skeleton.h" /> - <ClInclude Include="..\..\include\sampleutil\system.h" /> - <ClInclude Include="audio\audio_internal.h" /> - <ClInclude Include="audio\ngs2\ngs2_internal.h" /> - <ClInclude Include="audio\ngs2\ngs2_stream.h" /> - <ClInclude Include="audio\ngs\ngs_internal.h" /> - <ClInclude Include="audio\ngs\ngs_module.h" /> - <ClInclude Include="debug\debug_menu_internal.h" /> - <ClInclude Include="graphics\collada\collada_internal.h" /> - <ClInclude Include="graphics\collada\collada_material.h" /> - <ClInclude Include="graphics\collada\collada_scene.h" /> - <ClInclude Include="graphics\collada\collada_transform.h" /> - <ClInclude Include="graphics\collada\collada_util.h" /> - <ClInclude Include="graphics\collada\dae\dae.h" /> - <ClInclude Include="graphics\collada\dae\dae_animation.h" /> - <ClInclude Include="graphics\collada\dae\dae_common.h" /> - <ClInclude Include="graphics\collada\dae\dae_control.h" /> - <ClInclude Include="graphics\collada\dae\dae_data_flow.h" /> - <ClInclude Include="graphics\collada\dae\dae_effect.h" /> - <ClInclude Include="graphics\collada\dae\dae_geometry.h" /> - <ClInclude Include="graphics\collada\dae\dae_scene.h" /> - <ClInclude Include="graphics\collada\dae\dae_transform.h" /> - <ClInclude Include="graphics\collada\dae\dae_vscene.h" /> - <ClInclude Include="graphics\constant_internal.h" /> - <ClInclude Include="graphics\font_internal.h" /> - <ClInclude Include="graphics\graphics_internal.h" /> - <ClInclude Include="graphics\image.h" /> - <ClInclude Include="graphics\platform_dx11\buffer_internal_dx11.h" /> - <ClInclude Include="graphics\platform_dx11\constant_internal_dx11.h" /> - <ClInclude Include="graphics\platform_dx11\context_internal_dx11.h" /> - <ClInclude Include="graphics\platform_dx11\dx11_internal.h" /> - <ClInclude Include="graphics\platform_dx11\font_win.h" /> - <ClInclude Include="graphics\platform_dx11\loader_internal_dx11.h" /> - <ClInclude Include="graphics\platform_dx11\program_internal_dx11.h" /> - <ClInclude Include="graphics\platform_gnm\buffer_internal_gnm.h" /> - <ClInclude Include="graphics\platform_gnm\constant_internal_gnm.h" /> - <ClInclude Include="graphics\platform_gnm\context_internal_gnm.h" /> - <ClInclude Include="graphics\platform_gnm\font_orbis.h" /> - <ClInclude Include="graphics\platform_gnm\gnm_internal.h" /> - <ClInclude Include="graphics\platform_gnm\heap_gnm.h" /> - <ClInclude Include="graphics\platform_gnm\image_gnm.h" /> - <ClInclude Include="graphics\platform_gnm\loader_internal_gnm.h" /> - <ClInclude Include="graphics\platform_gnm\program_internal_gnm.h" /> - <ClInclude Include="graphics\platform_gxm\buffer_internal_gxm.h" /> - <ClInclude Include="graphics\platform_gxm\constant_internal_gxm.h" /> - <ClInclude Include="graphics\platform_gxm\context_internal_gxm.h" /> - <ClInclude Include="graphics\platform_gxm\font_psp2.h" /> - <ClInclude Include="graphics\platform_gxm\gxm_internal.h" /> - <ClInclude Include="graphics\platform_gxm\heap_gxm.h" /> - <ClInclude Include="graphics\platform_gxm\loader_internal_gxm.h" /> - <ClInclude Include="graphics\platform_gxm\program_internal_gxm.h" /> - <ClInclude Include="graphics\platform_gxm\texture_util_gxm.h" /> - <ClInclude Include="graphics\sprite_internal.h" /> - <ClInclude Include="input\controller_common.h" /> - <ClInclude Include="input\pad_common.h" /> - <ClInclude Include="resource\resource_manager.h" /> - <ClInclude Include="resource\shader_base.h" /> - <ClInclude Include="resource\std_cbuffer.h" /> - <ClInclude Include="sampleutil_internal.h" /> - <ClInclude Include="stdafx.h" /> - <ClInclude Include="util\util.h" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="audio\audio.cpp" /> - <ClCompile Include="audio\audio_data.cpp" /> - <ClCompile Include="audio\ngs2\ngs2_context.cpp" /> - <ClCompile Include="audio\ngs2\ngs2_data.cpp" /> - <ClCompile Include="audio\ngs2\ngs2_rack.cpp" /> - <ClCompile Include="audio\ngs2\ngs2_stream.cpp" /> - <ClCompile Include="audio\ngs2\ngs2_thread.cpp" /> - <ClCompile Include="audio\ngs2\ngs2_voice.cpp" /> - <ClCompile Include="audio\ngs\ngs_audio_util.cpp" /> - <ClCompile Include="audio\ngs\ngs_buss.cpp" /> - <ClCompile Include="audio\ngs\ngs_context.cpp" /> - <ClCompile Include="audio\ngs\ngs_data.cpp" /> - <ClCompile Include="audio\ngs\ngs_module.cpp" /> - <ClCompile Include="audio\ngs\ngs_stream.cpp" /> - <ClCompile Include="audio\ngs\ngs_voice.cpp" /> - <ClCompile Include="audio\ngs\ngs_worker_thread.cpp" /> - <ClCompile Include="debug\console.cpp" /> - <ClCompile Include="debug\debug_menu_item_group.cpp" /> - <ClCompile Include="debug\menu.cpp" /> - <ClCompile Include="graphics\buffer.cpp" /> - <ClCompile Include="graphics\collada\collada.cpp" /> - <ClCompile Include="graphics\collada\collada_animation.cpp" /> - <ClCompile Include="graphics\collada\collada_base.cpp" /> - <ClCompile Include="graphics\collada\collada_controller.cpp" /> - <ClCompile Include="graphics\collada\collada_effect.cpp" /> - <ClCompile Include="graphics\collada\collada_geometry.cpp" /> - <ClCompile Include="graphics\collada\collada_image.cpp" /> - <ClCompile Include="graphics\collada\collada_scene.cpp" /> - <ClCompile Include="graphics\collada\collada_util.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_animation.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_control.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_data_flow.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_effect.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_geom.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_geometry.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_scene.cpp" /> - <ClCompile Include="graphics\collada\dae\dae_transform.cpp" /> - <ClCompile Include="graphics\effect.cpp" /> - <ClCompile Include="graphics\font.cpp" /> - <ClCompile Include="graphics\frame_buffer.cpp" /> - <ClCompile Include="graphics\image.cpp" /> - <ClCompile Include="graphics\loader.cpp" /> - <ClCompile Include="graphics\platform_dx11\buffer_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\constant_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\context_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\font_win.cpp" /> - <ClCompile Include="graphics\platform_dx11\frame_buffer_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\image_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\loader_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\program_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\render_target_dx11.cpp" /> - <ClCompile Include="graphics\platform_dx11\texture_dx11.cpp" /> - <ClCompile Include="graphics\platform_gnm\buffer_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\constant_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\context_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\font_orbis.cpp" /> - <ClCompile Include="graphics\platform_gnm\frame_buffer_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\heap_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\image_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\loader_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\memory_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\program_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\render_target_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\shader_loader_gnm.cpp" /> - <ClCompile Include="graphics\platform_gnm\texture_gnm.cpp" /> - <ClCompile Include="graphics\platform_gxm\buffer_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\constant_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\context_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\font_psp2.cpp" /> - <ClCompile Include="graphics\platform_gxm\frame_buffer_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\heap_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\image_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\loader_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\program_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\render_target_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\texture_gxm.cpp" /> - <ClCompile Include="graphics\platform_gxm\texture_util_gxm.cpp" /> - <ClCompile Include="graphics\program.cpp" /> - <ClCompile Include="graphics\sprite.cpp" /> - <ClCompile Include="graphics\sprite_effect_2d.cpp" /> - <ClCompile Include="graphics\texture.cpp" /> - <ClCompile Include="input\controller_common.cpp" /> - <ClCompile Include="input\orbis\pad_orbis.cpp" /> - <ClCompile Include="input\pad_common.cpp" /> - <ClCompile Include="input\psp2\controller_psp2.cpp" /> - <ClCompile Include="input\psp2\motion_psp2.cpp" /> - <ClCompile Include="input\psp2\pad_psp2.cpp" /> - <ClCompile Include="input\psp2\touch_psp2.cpp" /> - <ClCompile Include="input\win\controller_win.cpp" /> - <ClCompile Include="input\win\pad_win.cpp" /> - <ClCompile Include="input\win\touch_win.cpp" /> - <ClCompile Include="resource\dllmain.cpp" /> - <ClCompile Include="resource\resource_manager.cpp" /> - <ClCompile Include="sampleutil_common.cpp" /> - <ClCompile Include="skeleton.cpp" /> - <ClCompile Include="system\orbis\save_data_orbis.cpp" /> - <ClCompile Include="system\orbis\user_orbis.cpp" /> - <ClCompile Include="system\psp2\save_data_psp2.cpp" /> - <ClCompile Include="system\psp2\user_psp2.cpp" /> - <ClCompile Include="system\win\save_data_win.cpp" /> - <ClCompile Include="system\win\user_win.cpp" /> - <ClCompile Include="util\util.cpp" /> - <ClCompile Include="util\util_streaming.cpp" /> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="resource\sampleutil_fill2d_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - </AdditionalInputs> - <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - </AdditionalInputs> - <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'"> - </AdditionalInputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill2d_v.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="resource\sampleutil_clear_p.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_clear_vv.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="resource\sampleutil_point_sprite2d_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - </AdditionalInputs> - <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - </AdditionalInputs> - <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'"> - </AdditionalInputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_point_sprite2d_v.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_v.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_ascii.tga"> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -copy "%(FullPath)" "$(IntDir)%(Filename).tga" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).tga" "%(Filename).obj" -popd -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">if not exist "$(IntDir)" md "$(IntDir)" -copy "%(FullPath)" "$(IntDir)%(Filename).tga" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).tga" "%(Filename).obj" -popd -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "%(FullPath)" -b2e PSP2,_binary_%(Filename)_tga_start,_binary_%(Filename)_tga_size -o "$(IntDir)%(Filename)_tga.obj" -</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_tga.obj;%(Outputs)</Outputs> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -copy "%(FullPath)" "$(IntDir)%(Filename).tga" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).tga" "%(Filename).obj" -popd -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">if not exist "$(IntDir)" md "$(IntDir)" -copy "%(FullPath)" "$(IntDir)%(Filename).tga" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).tga" "%(Filename).obj" -popd -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "%(FullPath)" -b2e PSP2,_binary_%(Filename)_tga_start,_binary_%(Filename)_tga_size -o "$(IntDir)%(Filename)_tga.obj" -</Command> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename).obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_tga.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild> - </CustomBuild> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="resource\sampleutil_clear_f.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_clear_v.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill2d_f.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill2d_v.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_point_sprite2d_f.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_point_sprite2d_v.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_f.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_v.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_f.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_v.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_f.pssl"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_v.pssl"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.cg"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.cg"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.pssl"> - <FileType>Document</FileType> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_f.cg"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_v.cg"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_v.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">true</ExcludedFromBuild> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_sb.obj;</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_f.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_fp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_v.cg"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">"$(SCE_PSP2_SDK_DIR)"\host_tools\bin\psp2cgc.exe --profile sce_vp_psp2 "%(FullPath)" -o "$(IntDir)%(Filename).gxp" -"$(SCE_PSP2_SDK_DIR)"\host_tools\build\bin\psp2bin.exe "$(IntDir)%(Filename).gxp" -b2e PSP2,_binary_%(Filename)_gxp_start,_binary_%(Filename)_gxp_size,4 -o "$(IntDir)%(Filename)_gxp.obj" -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|PSVita'">$(IntDir)%(Filename)_gxp.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_v.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj;%(Outputs)</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_f.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_ps_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Fragment Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_v.pssl"> - <FileType>Document</FileType> - <Command Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd -</Command> - <Command Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">if not exist "$(IntDir)" md "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-wave-psslc.exe" -profile sce_vs_vs_orbis "%(FullPath)" -o "$(IntDir)%(Filename).sb" -pushd "$(IntDir)" -"$(SCE_ORBIS_SDK_DIR)\host_tools\bin\orbis-objcopy.exe" -I binary -O elf64-x86-64 -B i386 "%(Filename).sb" "%(Filename)_sb.obj" -popd -</Command> - <Message Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - <Message Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">Compiling Vertex Shader: "%(FullPath)"</Message> - <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(IntDir)%(Filename)_sb.obj</Outputs> - </CustomBuild> - <None Include="resource\vsoutput.hs" /> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="resource\libSceSampleUtil.rc" /> - </ItemGroup> - <Import Condition="'$(ConfigurationType)' == 'Makefile' and Exists('$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets')" Project="$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.filters deleted file mode 100644 index 7284c3d..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.filters +++ /dev/null
@@ -1,833 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cxx;cc;s;asm</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hpp</Extensions> - </Filter> - <Filter Include="Source Files\graphics"> - <UniqueIdentifier>{b1346de6-e476-4511-b903-d7900f31aa0f}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\input"> - <UniqueIdentifier>{77dd35ea-1790-4bdf-932a-211ab73b875b}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\graphics\collada"> - <UniqueIdentifier>{96fc6757-68ff-4fc1-aebf-889d255c56b7}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\graphics\collada\dae"> - <UniqueIdentifier>{fc715001-0ae0-4f30-aab3-959f7c73bc29}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\graphics\platform_gnm"> - <UniqueIdentifier>{ecf91a0b-ee15-4b04-abf4-f61372b83438}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\audio"> - <UniqueIdentifier>{f30bddbc-6aad-436b-8ff6-2686aac95c18}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\audio\ngs2"> - <UniqueIdentifier>{67e01345-fdb3-473d-bcc2-772196cb6852}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\Resource"> - <UniqueIdentifier>{719af2ff-2b25-49d6-bcf2-5613eef4f3f3}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util"> - <UniqueIdentifier>{24b4b573-8fbb-49e0-a960-fe051cb20da3}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\Audio"> - <UniqueIdentifier>{9be1ca38-b2c3-4228-a208-4fb50c69b823}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\graphics"> - <UniqueIdentifier>{02155831-4f6c-4313-be6c-0455083f264d}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\graphics\collada"> - <UniqueIdentifier>{251fc1da-25f4-4982-835e-e4aab23a3ee9}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\graphics\platform_gnm"> - <UniqueIdentifier>{9a407e69-ecd3-488e-83a3-aed61cd20707}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\debug"> - <UniqueIdentifier>{09e2ddc6-9563-4fae-8a60-c1c1499a9493}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\debug"> - <UniqueIdentifier>{1a668115-ef74-4445-8af9-808390b4ad4d}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\graphics\platform_gxm"> - <UniqueIdentifier>{8da06857-7958-4602-a123-517aa1d98f5d}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\graphics\platform_dx11"> - <UniqueIdentifier>{8c93893c-27c0-4eb6-8205-0f7132b8615e}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\graphics\platform_gxm"> - <UniqueIdentifier>{21d0ef12-3fc4-4a49-8d9d-622a43acc513}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\graphics\platform_dx11"> - <UniqueIdentifier>{b669e6e8-f199-4744-9a55-6e24f82088fa}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\Resource\pssl"> - <UniqueIdentifier>{c5092e21-dfbf-4506-8610-2c7790192e9e}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\Resource\cg"> - <UniqueIdentifier>{3e4bb032-bb60-4124-a966-9d6261bf8549}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\audio\ngs"> - <UniqueIdentifier>{d5851d03-29f7-4e6b-95e2-b51f3e1bb5b0}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\input\psp2"> - <UniqueIdentifier>{5805689e-aa21-46d0-a3fb-b3f0d31257db}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\input\win"> - <UniqueIdentifier>{249df471-9168-4b5c-b3df-19fb830ecb34}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\input\orbis"> - <UniqueIdentifier>{04f123fb-f86e-4833-9370-401bd85796c6}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\input"> - <UniqueIdentifier>{efe408b5-ffd2-43ae-9e89-89318a99b8f1}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\util"> - <UniqueIdentifier>{18bab552-4afd-4f0f-b241-6c47ab235426}</UniqueIdentifier> - </Filter> - <Filter Include="Header Files\sample_util\system"> - <UniqueIdentifier>{c714f3b2-b8ba-480b-8398-dcd8938f5c08}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\system"> - <UniqueIdentifier>{c4a34eee-25ee-427d-966b-0f1123e33beb}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\system\win"> - <UniqueIdentifier>{131f6b49-ff8f-494a-a2fc-c0b44b6c3cf7}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\system\orbis"> - <UniqueIdentifier>{f9c9275c-0ccf-4206-b558-7ccbb825e264}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\system\psp2"> - <UniqueIdentifier>{2b5f4786-b6f4-43c2-9c4d-d16e5d308abb}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <ClInclude Include="graphics\collada\dae\dae.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_animation.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_common.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_control.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_data_flow.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_effect.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_geometry.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_scene.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_transform.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\dae\dae_vscene.h"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\collada_internal.h"> - <Filter>Source Files\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\collada_material.h"> - <Filter>Source Files\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\collada_scene.h"> - <Filter>Source Files\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\collada_util.h"> - <Filter>Source Files\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\gnm_internal.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\image.h"> - <Filter>Source Files\graphics</Filter> - </ClInclude> - <ClInclude Include="graphics\collada\collada_transform.h"> - <Filter>Source Files\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\buffer.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\collada.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\constant.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\context.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\effect.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\loader.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\platform.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\program.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\sprite.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\platform_gnm\platform_gnm.h"> - <Filter>Header Files\sample_util\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_animation.h"> - <Filter>Header Files\sample_util\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_base.h"> - <Filter>Header Files\sample_util\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_effect.h"> - <Filter>Header Files\sample_util\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_geometry.h"> - <Filter>Header Files\sample_util\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_image.h"> - <Filter>Header Files\sample_util\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\collada\collada_scene.h"> - <Filter>Header Files\sample_util\graphics\collada</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\audio.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\audio\context.h"> - <Filter>Header Files\sample_util\Audio</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\audio\data.h"> - <Filter>Header Files\sample_util\Audio</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\audio\voice.h"> - <Filter>Header Files\sample_util\Audio</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\input.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\sampleutil_common.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\sampleutil_error.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\skeleton.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="audio\ngs2\ngs2_internal.h"> - <Filter>Source Files\audio\ngs2</Filter> - </ClInclude> - <ClInclude Include="audio\ngs2\ngs2_stream.h"> - <Filter>Source Files\audio\ngs2</Filter> - </ClInclude> - <ClInclude Include="resource\resource_manager.h"> - <Filter>Source Files\Resource</Filter> - </ClInclude> - <ClInclude Include="resource\shader_base.h"> - <Filter>Source Files\Resource</Filter> - </ClInclude> - <ClInclude Include="resource\std_cbuffer.h"> - <Filter>Source Files\Resource</Filter> - </ClInclude> - <ClInclude Include="stdafx.h"> - <Filter>Source Files</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\debug\console.h"> - <Filter>Header Files\sample_util\debug</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\debug\menu.h"> - <Filter>Header Files\sample_util\debug</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\font.h"> - <Filter>Header Files\sample_util\graphics</Filter> - </ClInclude> - <ClInclude Include="graphics\graphics_internal.h"> - <Filter>Source Files\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\platform_gxm\platform_gxm.h"> - <Filter>Header Files\sample_util\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\graphics\platform_dx11\platform_dx11.h"> - <Filter>Header Files\sample_util\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\gxm_internal.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_dx11\dx11_internal.h"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\image_gnm.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\constant_internal.h"> - <Filter>Source Files\graphics</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\input\controller.h"> - <Filter>Header Files\sample_util\input</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\input\motion.h"> - <Filter>Header Files\sample_util\input</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\input\touch.h"> - <Filter>Header Files\sample_util\input</Filter> - </ClInclude> - <ClInclude Include="audio\ngs\ngs_internal.h"> - <Filter>Source Files\audio\ngs</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\heap_gxm.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\heap_gnm.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="util\util.h"> - <Filter>Source Files\util</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\texture_util_gxm.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="..\..\include\sampleutil\system.h"> - <Filter>Header Files\sample_util</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\buffer_internal_gnm.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\constant_internal_gnm.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\context_internal_gnm.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\loader_internal_gnm.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\program_internal_gnm.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_dx11\buffer_internal_dx11.h"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_dx11\constant_internal_dx11.h"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_dx11\context_internal_dx11.h"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_dx11\loader_internal_dx11.h"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_dx11\program_internal_dx11.h"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="sampleutil_internal.h"> - <Filter>Source Files</Filter> - </ClInclude> - <ClInclude Include="graphics\font_internal.h"> - <Filter>Source Files\graphics</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\buffer_internal_gxm.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\constant_internal_gxm.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\context_internal_gxm.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\loader_internal_gxm.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\program_internal_gxm.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="debug\debug_menu_internal.h"> - <Filter>Source Files\debug</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_dx11\font_win.h"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gnm\font_orbis.h"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClInclude> - <ClInclude Include="graphics\platform_gxm\font_psp2.h"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClInclude> - <ClInclude Include="graphics\sprite_internal.h"> - <Filter>Source Files\graphics</Filter> - </ClInclude> - <ClInclude Include="input\pad_common.h"> - <Filter>Source Files\input</Filter> - </ClInclude> - <ClInclude Include="input\controller_common.h"> - <Filter>Source Files\input</Filter> - </ClInclude> - <ClInclude Include="audio\audio_internal.h"> - <Filter>Source Files\audio</Filter> - </ClInclude> - <ClInclude Include="audio\ngs\ngs_module.h"> - <Filter>Source Files\audio\ngs</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ClCompile Include="graphics\frame_buffer.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="graphics\loader.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="graphics\program.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="graphics\effect.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="graphics\sprite.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="graphics\texture.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_animation.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_control.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_data_flow.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_effect.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_geom.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_geometry.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_scene.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\dae\dae_transform.cpp"> - <Filter>Source Files\graphics\collada\dae</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_animation.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_base.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_controller.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_effect.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_geometry.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_image.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_scene.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\buffer_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\constant_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\context_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\frame_buffer_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\loader_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\program_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\render_target_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\texture_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\image.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="audio\ngs2\ngs2_context.cpp"> - <Filter>Source Files\audio\ngs2</Filter> - </ClCompile> - <ClCompile Include="audio\ngs2\ngs2_voice.cpp"> - <Filter>Source Files\audio\ngs2</Filter> - </ClCompile> - <ClCompile Include="audio\ngs2\ngs2_data.cpp"> - <Filter>Source Files\audio\ngs2</Filter> - </ClCompile> - <ClCompile Include="audio\ngs2\ngs2_rack.cpp"> - <Filter>Source Files\audio\ngs2</Filter> - </ClCompile> - <ClCompile Include="audio\ngs2\ngs2_stream.cpp"> - <Filter>Source Files\audio\ngs2</Filter> - </ClCompile> - <ClCompile Include="audio\ngs2\ngs2_thread.cpp"> - <Filter>Source Files\audio\ngs2</Filter> - </ClCompile> - <ClCompile Include="resource\resource_manager.cpp"> - <Filter>Source Files\Resource</Filter> - </ClCompile> - <ClCompile Include="graphics\collada\collada_util.cpp"> - <Filter>Source Files\graphics\collada</Filter> - </ClCompile> - <ClCompile Include="skeleton.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="debug\console.cpp"> - <Filter>Source Files\debug</Filter> - </ClCompile> - <ClCompile Include="debug\menu.cpp"> - <Filter>Source Files\debug</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\buffer_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\constant_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\context_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\frame_buffer_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\loader_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\program_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\render_target_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\texture_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\buffer_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\constant_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\context_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\frame_buffer_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\loader_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\program_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\render_target_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\texture_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\image_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\shader_loader_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\buffer.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="audio\audio.cpp"> - <Filter>Source Files\audio</Filter> - </ClCompile> - <ClCompile Include="input\psp2\controller_psp2.cpp"> - <Filter>Source Files\input\psp2</Filter> - </ClCompile> - <ClCompile Include="input\psp2\touch_psp2.cpp"> - <Filter>Source Files\input\psp2</Filter> - </ClCompile> - <ClCompile Include="input\win\controller_win.cpp"> - <Filter>Source Files\input\win</Filter> - </ClCompile> - <ClCompile Include="input\win\touch_win.cpp"> - <Filter>Source Files\input\win</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_audio_util.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_buss.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_context.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_data.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_module.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_stream.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_voice.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="audio\ngs\ngs_worker_thread.cpp"> - <Filter>Source Files\audio\ngs</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\heap_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\heap_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\memory_gnm.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="resource\dllmain.cpp"> - <Filter>Source Files\Resource</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\image_dx11.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\image_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\texture_util_gxm.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="sampleutil_common.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="system\orbis\save_data_orbis.cpp"> - <Filter>Source Files\system\orbis</Filter> - </ClCompile> - <ClCompile Include="system\psp2\save_data_psp2.cpp"> - <Filter>Source Files\system\psp2</Filter> - </ClCompile> - <ClCompile Include="system\win\save_data_win.cpp"> - <Filter>Source Files\system\win</Filter> - </ClCompile> - <ClCompile Include="graphics\font.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="util\util.cpp"> - <Filter>Source Files\util</Filter> - </ClCompile> - <ClCompile Include="debug\debug_menu_item_group.cpp"> - <Filter>Source Files\debug</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_dx11\font_win.cpp"> - <Filter>Source Files\graphics\platform_dx11</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gnm\font_orbis.cpp"> - <Filter>Source Files\graphics\platform_gnm</Filter> - </ClCompile> - <ClCompile Include="graphics\platform_gxm\font_psp2.cpp"> - <Filter>Source Files\graphics\platform_gxm</Filter> - </ClCompile> - <ClCompile Include="graphics\sprite_effect_2d.cpp"> - <Filter>Source Files\graphics</Filter> - </ClCompile> - <ClCompile Include="input\pad_common.cpp"> - <Filter>Source Files\input</Filter> - </ClCompile> - <ClCompile Include="input\psp2\pad_psp2.cpp"> - <Filter>Source Files\input\psp2</Filter> - </ClCompile> - <ClCompile Include="system\win\user_win.cpp"> - <Filter>Source Files\system\win</Filter> - </ClCompile> - <ClCompile Include="system\psp2\user_psp2.cpp"> - <Filter>Source Files\system\psp2</Filter> - </ClCompile> - <ClCompile Include="system\orbis\user_orbis.cpp"> - <Filter>Source Files\system\orbis</Filter> - </ClCompile> - <ClCompile Include="input\orbis\pad_orbis.cpp"> - <Filter>Source Files\input\orbis</Filter> - </ClCompile> - <ClCompile Include="input\psp2\motion_psp2.cpp"> - <Filter>Source Files\input\psp2</Filter> - </ClCompile> - <ClCompile Include="input\win\pad_win.cpp"> - <Filter>Source Files\input\win</Filter> - </ClCompile> - <ClCompile Include="input\controller_common.cpp"> - <Filter>Source Files\input</Filter> - </ClCompile> - <ClCompile Include="audio\audio_data.cpp"> - <Filter>Source Files\audio</Filter> - </ClCompile> - <ClCompile Include="util\util_streaming.cpp"> - <Filter>Source Files\util</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <CustomBuild Include="resource\sampleutil_ascii.tga"> - <Filter>Source Files\Resource</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_clear_p.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_clear_vv.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill2d_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill2d_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_point_sprite2d_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_point_sprite2d_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_clear_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_clear_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_collada_skinning_phong_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill2d_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill2d_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_point_sprite2d_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_point_sprite2d_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_2_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_yuy2_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_fill3d_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_f.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_wireframe_v.cg"> - <Filter>Source Files\Resource\cg</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_f.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - <CustomBuild Include="resource\sampleutil_sprite2d_ycbcr_v.pssl"> - <Filter>Source Files\Resource\pssl</Filter> - </CustomBuild> - </ItemGroup> - <ItemGroup> - <None Include="resource\vsoutput.hs"> - <Filter>Source Files\Resource</Filter> - </None> - </ItemGroup> - <ItemGroup> - <ResourceCompile Include="resource\libSceSampleUtil.rc"> - <Filter>Source Files\Resource</Filter> - </ResourceCompile> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.user b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.user deleted file mode 100644 index 695b5c7..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/common/source/sampleutil/libSceSampleUtil.vcxproj.user +++ /dev/null
@@ -1,3 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/dbg_font/dbg_font.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/dbg_font/dbg_font.vcxproj deleted file mode 100644 index 68ff2dc..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/dbg_font/dbg_font.vcxproj +++ /dev/null
@@ -1,77 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectName>_dbg_font</ProjectName> - <ProjectGuid>{43565ad8-688c-4451-a81f-2aba8e957753}</ProjectGuid> - <RootNamespace>dkdev</RootNamespace> - <Keyword>Win32Proj</Keyword> - <GnmProjectType>SampleLib</GnmProjectType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - </PropertyGroup> - <ImportGroup Label="PropertySheets"> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.props')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.props')" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">libSceDbgFont_debug</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">libSceDbgFont</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="dbg_font.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="dbg_font.h" /> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="dbg_font_printf_c.pssl" /> - <Compile_PSSL_To_Header Include="dbg_font_render_c.pssl" /> - <Compile_PSSL_To_Header Include="dbg_font_render_p.pssl" /> - </ItemGroup> - <ItemGroup> - <None Include="dbg_font_render.hs" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.targets')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.targets')" /> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/framework/framework.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/framework/framework.vcxproj deleted file mode 100644 index 27927f1..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/framework/framework.vcxproj +++ /dev/null
@@ -1,98 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectName>_framework</ProjectName> - <ProjectGuid>{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}</ProjectGuid> - <RootNamespace>dkdev</RootNamespace> - <Keyword>Win32Proj</Keyword> - <GnmProjectType>SampleLib</GnmProjectType> - </PropertyGroup> - <PropertyGroup Condition="'$(Platform)'=='ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - </PropertyGroup> - <ImportGroup Label="PropertySheets"> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.props')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.props')" /> - </ImportGroup> - <ImportGroup Label="ExtensionSettings" /> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">framework_debug</TargetName> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">framework</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="controller.cpp" /> - <ClCompile Include="debug_objects.cpp" /> - <ClCompile Include="eopeventqueue.cpp" /> - <ClCompile Include="frame.cpp" /> - <ClCompile Include="framework.cpp" /> - <ClCompile Include="gnf_loader.cpp" /> - <ClCompile Include="noise_prep.cpp" /> - <ClCompile Include="sample_framework.cpp" /> - <ClCompile Include="sample_framework_menu.cpp" /> - <ClCompile Include="simple_mesh.cpp" /> - <ClCompile Include="thread.cpp" /> - </ItemGroup> - <ItemGroup> - <CustomBuildStep Include="framework.h" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="configdata.h" /> - <ClInclude Include="controller.h" /> - <ClInclude Include="debug_objects.h" /> - <ClInclude Include="eopeventqueue.h" /> - <ClInclude Include="frame.h" /> - <ClInclude Include="framework.h" /> - <ClInclude Include="gnf_loader.h" /> - <ClInclude Include="noise_prep.h" /> - <ClInclude Include="sample_framework.h" /> - <ClInclude Include="sample_framework_menu.h" /> - <ClInclude Include="simple_mesh.h" /> - <ClInclude Include="thread.h" /> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="dbg_font_repair_c.pssl" /> - <Compile_PSSL_To_Header Include="dbg_font_timer_c.pssl" /> - <Compile_PSSL_To_Header Include="dbg_font_unsigned_c.pssl" /> - <Compile_PSSL_To_Header Include="debug_vertex_p.pssl" /> - <Compile_PSSL_To_Header Include="debug_vertex_vv.pssl" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.targets')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.targets')" /> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/toolkit/toolkit.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/PS4/toolkit/toolkit.vcxproj deleted file mode 100644 index b62f72b..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/PS4/toolkit/toolkit.vcxproj +++ /dev/null
@@ -1,145 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectName>_toolkit</ProjectName> - <ProjectGuid>{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}</ProjectGuid> - <RootNamespace>dkdev</RootNamespace> - <Keyword>Win32Proj</Keyword> - <GnmProjectType>SampleLib</GnmProjectType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>StaticLibrary</ConfigurationType> - </PropertyGroup> - <ImportGroup Label="PropertySheets"> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <Import Project="$(SolutionDir)\SceGnm.props" Condition="Exists('$(SolutionDir)\SceGnm.props')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.props" Condition="!Exists('$(SolutionDir)\SceGnm.props')" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup> - <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion> - <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">toolkit</TargetName> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <TargetName>toolkit_debug</TargetName> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <UseFullPaths>true</UseFullPaths> - <ProgramDataBaseFileName>$(OutDir)\$(TargetName)-vc$(PlatformToolsetVersion).pdb</ProgramDataBaseFileName> - </ClCompile> - <Lib /> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="allocators.cpp" /> - <ClCompile Include="dataformat_interpreter.cpp" /> - <ClCompile Include="dataformat_tests.cpp" /> - <ClCompile Include="deallocator.cpp" /> - <ClCompile Include="embedded_shader.cpp" /> - <ClCompile Include="floating_point.cpp" /> - <ClCompile Include="region_allocator.cpp" /> - <ClCompile Include="shader_loader.cpp" /> - <ClCompile Include="stack_allocator.cpp" /> - <ClCompile Include="toolkit.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="allocator.h" /> - <ClInclude Include="allocators.h" /> - <ClInclude Include="dataformat_interpreter.h" /> - <ClInclude Include="dataformat_tests.h" /> - <ClInclude Include="deallocator.h" /> - <ClInclude Include="embedded_shader.h" /> - <ClInclude Include="floating_point.h" /> - <ClInclude Include="geommath\matrix4unaligned.h" /> - <ClInclude Include="geommath\vector2unaligned.h" /> - <ClInclude Include="geommath\vector3unaligned.h" /> - <ClInclude Include="geommath\vector4unaligned.h" /> - <ClInclude Include="geommath\geommath.h" /> - <ClInclude Include="memory.h" /> - <ClInclude Include="region_allocator.h" /> - <ClInclude Include="shader_common\illum.hs" /> - <ClInclude Include="shader_common\noise.hs" /> - <ClInclude Include="shader_common\shader_base.h" /> - <ClInclude Include="shader_common\vsoutput_common.hs" /> - <ClInclude Include="shader_loader.h" /> - <ClInclude Include="stack_allocator.h" /> - <CustomBuildStep Include="toolkit.h" /> - </ItemGroup> - <ItemGroup> - <Compile_PSSL_To_Header Include="shader_common\copytexture2d_p.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_clearbuffer_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_cleartexture1d_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_cleartexture2d_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_cleartexture3d_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_copybuffer_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="shader_common\cs_copyrawtexture1d_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="shader_common\cs_copyrawtexture2d_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="shader_common\cs_copyrawtexture3d_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="shader_common\cs_copytexture1d_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="shader_common\cs_copytexture2d_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="shader_common\cs_copytexture3d_c.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <Compile_PSSL_To_Header Include="shader_common\copydepth_p.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <PSSL Include="shader_common\pixbg_p.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_set_uint_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_set_uint_fast_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_test_buffer_read_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\cs_test_texture_read_c.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\pix_clear_p.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - <PSSL Include="shader_common\vexbg_vv.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\pix_generateMipMaps_3d_p.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\pix_generateMipMaps_2d_p.pssl" /> - <Compile_PSSL_To_Header Include="shader_common\vex_clear_vv.pssl"> - <FileType>Document</FileType> - </Compile_PSSL_To_Header> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <Import Project="$(SolutionDir)\SceGnm.targets" Condition="Exists('$(SolutionDir)\SceGnm.targets')" /> - <Import Project="$(SCE_ORBIS_SDK_DIR)\host_tools\msbuild\SceGnm.targets" Condition="!Exists('$(SolutionDir)\SceGnm.targets')" /> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj deleted file mode 100644 index f414575..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj +++ /dev/null
@@ -1,276 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{020D5EB9-D317-46FE-9CEC-557444DCDC6E}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>testvp9dec</RootNamespace> - <ProjectName>google-tests</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings"> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;../../libwebm</AdditionalIncludeDirectories> - <GenerateDebugInformation>true</GenerateDebugInformation> - <OptimizationLevel>Level0</OptimizationLevel> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);$(SolutionDir)ORBIS_Debug</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc;../../libwebm</AdditionalIncludeDirectories> - <OptimizationLevel>Level2</OptimizationLevel> - <GenerateDebugInformation>true</GenerateDebugInformation> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);$(SolutionDir)ORBIS_Release</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx.a;libSceGnm.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\vp9-dec-core;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;%(AdditionalDependencies)</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <None Include="ReadMe.txt" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\libwebm\mkvparser\mkvparser.h" /> - <ClInclude Include="..\..\libwebm\mkvparser\mkvreader.h" /> - <ClInclude Include="..\..\vpxdec\md5_utils.h" /> - <ClInclude Include="..\..\vpxdec\webmdec.h" /> - <ClInclude Include="..\gtest\gtest.h" /> - <ClInclude Include="..\stdafx.h" /> - <ClInclude Include="..\targetver.h" /> - <ClInclude Include="..\tests\conformance_files.h" /> - <ClInclude Include="..\tests\decode_test_driver.h" /> - <ClInclude Include="..\tests\ivf_video_source.h" /> - <ClInclude Include="..\tests\md5_helper.h" /> - <ClInclude Include="..\tests\test_vectors.h" /> - <ClInclude Include="..\tests\video_source.h" /> - <ClInclude Include="..\tests\webm_video_source.h" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\..\libSimplePlayer\memory_helper.cpp" /> - <ClCompile Include="..\..\libwebm\mkvparser\mkvparser.cc" /> - <ClCompile Include="..\..\libwebm\mkvparser\mkvreader.cc" /> - <ClCompile Include="..\..\vpxdec\md5_utils.c" /> - <ClCompile Include="..\..\vpxdec\user_malloc.cpp" /> - <ClCompile Include="..\..\vpxdec\webmdec.cc" /> - <ClCompile Include="..\gtest\gtest-all.cc" /> - <ClCompile Include="..\stdafx.cpp" /> - <ClCompile Include="..\test-vp9-dec.cpp" /> - <ClCompile Include="..\tests\frame_cb_test.cpp" /> - <ClCompile Include="..\tests\decode_api_test.cc" /> - <ClCompile Include="..\tests\decode_test_driver.cc" /> - <ClCompile Include="..\tests\external_frame_buffer_test.cc" /> - <ClCompile Include="..\tests\invalid_file_test.cc" /> - <ClCompile Include="..\tests\test_conformance.cc" /> - <ClCompile Include="..\tests\test_vectors.cc" /> - <ClCompile Include="..\tests\test_vector_test.cc" /> - <ClCompile Include="..\tests\user_priv_test.cc" /> - <ClCompile Include="..\tests\vp9_decrypt_test.cc" /> - <ClCompile Include="..\tests\vp9_frame_parallel_test.cc" /> - <ClCompile Include="..\tests\vp9_skip_loopfilter_test.cc" /> - <ClCompile Include="..\tests\vp9_thread_test.cc" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - </ImportGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj.filters deleted file mode 100644 index 462392e..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/google-tests/build/test-vp9-dec.vcxproj.filters +++ /dev/null
@@ -1,138 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - <Filter Include="Source Files\gtest"> - <UniqueIdentifier>{4f095190-995f-4343-a0ac-89cf69fbd8f1}</UniqueIdentifier> - </Filter> - <Filter Include="Source Files\tests"> - <UniqueIdentifier>{4e2171ea-d54f-478c-b71d-61374f0b6a6a}</UniqueIdentifier> - </Filter> - </ItemGroup> - <ItemGroup> - <None Include="ReadMe.txt" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\stdafx.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\targetver.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\gtest\gtest.h"> - <Filter>Source Files\gtest</Filter> - </ClInclude> - <ClInclude Include="..\tests\decode_test_driver.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\tests\md5_helper.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\tests\webm_video_source.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\tests\test_vectors.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\tests\video_source.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\..\vpxdec\webmdec.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\tests\ivf_video_source.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\tests\conformance_files.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\..\vpxdec\md5_utils.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\..\libwebm\mkvparser\mkvparser.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - <ClInclude Include="..\..\libwebm\mkvparser\mkvreader.h"> - <Filter>Source Files\tests</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\stdafx.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\test-vp9-dec.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\tests\user_priv_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\gtest\gtest-all.cc"> - <Filter>Source Files\gtest</Filter> - </ClCompile> - <ClCompile Include="..\tests\decode_test_driver.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\invalid_file_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\vp9_frame_parallel_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\vp9_thread_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\test_vector_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\test_vectors.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\vp9_skip_loopfilter_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\vp9_decrypt_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\decode_api_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\..\vpxdec\user_malloc.cpp"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\..\vpxdec\webmdec.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\..\vpxdec\md5_utils.c"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\external_frame_buffer_test.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\..\libSimplePlayer\memory_helper.cpp"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\frame_cb_test.cpp"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\tests\test_conformance.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\..\libwebm\mkvparser\mkvparser.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - <ClCompile Include="..\..\libwebm\mkvparser\mkvreader.cc"> - <Filter>Source Files\tests</Filter> - </ClCompile> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj deleted file mode 100644 index 8284322..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj +++ /dev/null
@@ -1,155 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <VCTargetsPath Condition="'$(VCTargetsPath12)' != '' and '$(VSVersion)' == '' and '$(VisualStudioVersion)' == ''">$(VCTargetsPath12)</VCTargetsPath> - <ProjectGuid>{901DB192-225E-48D3-8C4D-015A4DE1F6B4}</ProjectGuid> - <ProjectName>luxSimplePlayer</ProjectName> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <PropertyGroup Condition="'$(DebuggerFlavor)'=='ORBISDebugger'" Label="OverrideDebuggerDefaults"> - <!--LocalDebuggerCommand>$(TargetPath)</LocalDebuggerCommand--> - <!--LocalDebuggerCommandArguments></LocalDebuggerCommandArguments--> - <!--LocalDebuggerTarget></LocalDebuggerTarget--> - <!--LocalDebuggerWorkingDirectory>$(ProjectDir)</LocalDebuggerWorkingDirectory--> - <!--LocalRunCommandLine></LocalRunCommandLine--> - </PropertyGroup> - <ImportGroup Label="ExtensionSettings"> - <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.props" /> - <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.props" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <GenerateDebugInformation>true</GenerateDebugInformation> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <AdditionalIncludeDirectories>../PS4/;../PS4/common/include;../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <AdditionalDependencies>-lScePosix_stub_weak;-lSceVideodec_stub_weak;libScePm4Dump.a;vp9-dec-core$(PlatformArchitecture).a;libSceGnm.a;libSceGnmx.a;libSceVideoOut_stub_weak.a;libSceGpuAddress.a;libScePad_stub_weak.a;libSceGnmDriver_stub_weak.a;libSceGnf.a;libSceShaderBinary.a</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories> - </Link> - <OrbisWavePsslc> - <OutputFileName>$(ProjectDir)%(FileName).sb</OutputFileName> - </OrbisWavePsslc> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <OptimizationLevel>Levels</OptimizationLevel> - <PrecompiledHeader>NotUsing</PrecompiledHeader> - <AdditionalIncludeDirectories>../PS4/;../PS4/common/include;../../vp9-dec-core;../../vp9-dec-core/build;../libwebm;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> - <GenerateDebugInformation>true</GenerateDebugInformation> - </ClCompile> - <Link> - <AdditionalDependencies>-lScePosix_stub_weak;-lSceVideodec_stub_weak;libScePm4Dump.a;vp9-dec-core$(PlatformArchitecture).a;libSceGnm.a;libSceGnmx.a;libSceVideoOut_stub_weak.a;libSceGpuAddress.a;libScePad_stub_weak.a;libSceGnmDriver_stub_weak.a;libSceGnf.a;libSceShaderBinary.a</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemGroup> - <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.cpp" /> - <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.c" /> - <ClCompile Include="..\libwebm\common\hdr_util.cc" /> - <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxer.cc" /> - <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxerutil.cc" /> - <ClCompile Include="..\libwebm\mkvmuxer\mkvwriter.cc" /> - <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc" /> - <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc" /> - <ClCompile Include="..\vpxdec\md5_utils.c" /> - <ClCompile Include="..\vpxdec\tools_common.c" /> - <ClCompile Include="..\vpxdec\user_malloc.cpp" /> - <ClCompile Include="..\vpxdec\webmdec.cc" /> - <ClCompile Include="display.cpp" /> - <ClCompile Include="main.cpp" /> - <ClCompile Include="memory_helper.cpp" /> - <ClCompile Include="stream_metadata.cpp" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.h" /> - <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.h" /> - <ClInclude Include="..\libwebm\common\hdr_util.h" /> - <ClInclude Include="..\libwebm\common\webmids.h" /> - <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxer.h" /> - <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxertypes.h" /> - <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxerutil.h" /> - <ClInclude Include="..\libwebm\mkvmuxer\mkvwriter.h" /> - <ClInclude Include="..\libwebm\mkvparser\mkvparser.h" /> - <ClInclude Include="..\libwebm\mkvparser\mkvreader.h" /> - <ClInclude Include="..\vpxdec\md5_utils.h" /> - <ClInclude Include="..\vpxdec\tools_common.h" /> - <ClInclude Include="..\vpxdec\webmdec.h" /> - <ClInclude Include="display.h" /> - <ClInclude Include="ivf_video_source.h" /> - <ClInclude Include="memory_helper.h" /> - <ClInclude Include="stream_metadata.h" /> - <ClInclude Include="video_source.h" /> - <ClInclude Include="webm_video_source.h" /> - </ItemGroup> - <ItemGroup> - <OrbisWavePsslc Include="shader_CSC_p.pssl" /> - <OrbisWavePsslc Include="shader_vv.pssl"> - <FileType>Document</FileType> - <OutputFileName Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'">$(ProjectDir)%(FileName).sb</OutputFileName> - </OrbisWavePsslc> - </ItemGroup> - <ItemGroup> - <ProjectReference Include="..\PS4\common\source\sampleutil\libSceSampleUtil.vcxproj"> - <Project>{30a1b994-c2c6-485f-911b-fb4674366da8}</Project> - </ProjectReference> - <ProjectReference Include="..\PS4\dbg_font\dbg_font.vcxproj"> - <Project>{43565ad8-688c-4451-a81f-2aba8e957753}</Project> - </ProjectReference> - <ProjectReference Include="..\PS4\framework\framework.vcxproj"> - <Project>{f950cc65-80ef-4b1f-86a3-2b87b3f23c96}</Project> - </ProjectReference> - <ProjectReference Include="..\PS4\toolkit\toolkit.vcxproj"> - <Project>{2f4ccf89-7649-4c7f-8cbf-f976b4fbc2b6}</Project> - </ProjectReference> - </ItemGroup> - <ItemGroup> - <None Include="helper_functions.hs" /> - </ItemGroup> - <Import Condition="'$(ConfigurationType)' == 'Makefile' and Exists('$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets')" Project="$(VCTargetsPath)\Platforms\$(Platform)\SCE.Makefile.$(Platform).targets" /> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets"> - <Import Project="$(VCTargetsPath)\BuildCustomizations\OrbisWavePsslc.targets" /> - <Import Project="$(VCTargetsPath)\BuildCustomizations\SCU.targets" /> - </ImportGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj.filters deleted file mode 100644 index 074c689..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/libSimplePlayer/libSimplePlayer.vcxproj.filters +++ /dev/null
@@ -1,131 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cxx;cc;s;asm</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hpp</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <ClCompile Include="display.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="main.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\vpxdec\webmdec.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\vpxdec\user_malloc.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\vpxdec\tools_common.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\vpxdec\md5_utils.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="memory_helper.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\common\hdr_util.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxer.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvmuxer\mkvmuxerutil.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvmuxer\mkvwriter.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="stream_metadata.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> - <ItemGroup> - <ClInclude Include="display.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="video_source.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="webm_video_source.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="ivf_video_source.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\vpxdec\webmdec.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\vpxdec\tools_common.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\vpxdec\md5_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_linear_allocator.h"> - <Filter>Source Files</Filter> - </ClInclude> - <ClInclude Include="..\..\vp9-dec-core\vp9\decoder\vp9lux_thread.h"> - <Filter>Source Files</Filter> - </ClInclude> - <ClInclude Include="memory_helper.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\common\hdr_util.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\common\webmids.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxer.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxertypes.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvmuxer\mkvmuxerutil.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvmuxer\mkvwriter.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvparser\mkvparser.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvparser\mkvreader.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="stream_metadata.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <OrbisWavePsslc Include="shader_vv.pssl" /> - <OrbisWavePsslc Include="shader_CSC_p.pssl" /> - </ItemGroup> - <ItemGroup> - <None Include="helper_functions.hs"> - <Filter>Source Files</Filter> - </None> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj b/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj deleted file mode 100644 index bbe42aa..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj +++ /dev/null
@@ -1,308 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project DefaultTargets="Build" ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup Label="ProjectConfigurations"> - <ProjectConfiguration Include="Debug|ORBIS"> - <Configuration>Debug</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|Win32"> - <Configuration>Debug</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Debug|x64"> - <Configuration>Debug</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|ORBIS"> - <Configuration>Release</Configuration> - <Platform>ORBIS</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|Win32"> - <Configuration>Release</Configuration> - <Platform>Win32</Platform> - </ProjectConfiguration> - <ProjectConfiguration Include="Release|x64"> - <Configuration>Release</Configuration> - <Platform>x64</Platform> - </ProjectConfiguration> - </ItemGroup> - <PropertyGroup Label="Globals"> - <ProjectGuid>{427CA27F-0F97-4791-912D-E2499DCAE406}</ProjectGuid> - <Keyword>Win32Proj</Keyword> - <RootNamespace>vpxdec</RootNamespace> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>true</UseDebugLibraries> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>Clang</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="Configuration"> - <ConfigurationType>Application</ConfigurationType> - <UseDebugLibraries>false</UseDebugLibraries> - <WholeProgramOptimization>true</WholeProgramOptimization> - <CharacterSet>Unicode</CharacterSet> - <PlatformToolset>v120</PlatformToolset> - </PropertyGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> - <ImportGroup Label="ExtensionSettings" /> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'" Label="PropertySheets"> - <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> - </ImportGroup> - <PropertyGroup Label="UserMacros" /> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <IncludePath>$(VCInstallDir)include;$(VCInstallDir)atlmfc\include;$(WindowsSdkDir)include;$(FrameworkSDKDir)\include;$(ProgramFiles)\Visual Leak Detector\include</IncludePath> - <LibraryPath>$(VCInstallDir)lib;$(VCInstallDir)atlmfc\lib;$(WindowsSdkDir)lib;$(FrameworkSDKDir)\lib;$(ProgramFiles)\Visual Leak Detector\lib\Win32</LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <LinkIncremental>true</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <LibraryPath>$(SCE_ORBIS_SDK_DIR)\target\lib;$(LibraryPath)</LibraryPath> - <LinkIncremental>true</LinkIncremental> - <GnmUseGnm>true</GnmUseGnm> - <GnmUseGnmx>true</GnmUseGnmx> - <GnmUseAddressLibrary>true</GnmUseAddressLibrary> - <GnmUseLibShaderBinary>true</GnmUseLibShaderBinary> - <GnmUseGNF>true</GnmUseGNF> - <GnmUseTextureTool>false</GnmUseTextureTool> - <GnmUsePM4Dump>true</GnmUsePM4Dump> - <GnmUseSampleCommon>false</GnmUseSampleCommon> - <GnmProjectType>Sample</GnmProjectType> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)..\bin\msvs10\$(Configuration)\win$(PlatformArchitecture)\</OutDir> - <IntDir>$(SolutionDir)..\obj\msvs10\$(ProjectName)\$(Configuration)\win$(PlatformArchitecture)\</IntDir> - <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath> - </PropertyGroup> - <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <LibraryPath>$(DXSDK_DIR)lib\x64;$(LibraryPath)</LibraryPath> - <LinkIncremental>false</LinkIncremental> - <OutDir>$(SolutionDir)bin\$(Configuration)\</OutDir> - <IntDir>$(SolutionDir)obj\$(ProjectName)\$(Configuration)\</IntDir> - </PropertyGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib</AdditionalDependencies> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;D3D11.lib;d3dcompiler.lib</AdditionalDependencies> - <IgnoreSpecificDefaultLibraries> - </IgnoreSpecificDefaultLibraries> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'"> - <ClCompile> - <PrecompiledHeader> - </PrecompiledHeader> - <WarningLevel>Level3</WarningLevel> - <Optimization>Disabled</Optimization> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)vp9-dec-core\build\ORBIS_Debug;$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;../libwebm</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> - <GenerateDebugInformation>true</GenerateDebugInformation> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);$(SolutionDir)ORBIS_Debug</AdditionalLibraryDirectories> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies> - <IgnoreSpecificDefaultLibraries> - </IgnoreSpecificDefaultLibraries> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)..\..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - </Link> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\..\dec-cores\vp9-dec-core\build;$(SolutionDir)..\..\dec-cores\vp9-dec-core;$(SolutionDir)..\..\dec-cores\vp9-dec-core\build\build_$(Platform);$(SolutionDir)/../../Thirdparty/amd/mcl/1.6/amdmcl/inc</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).lib;D3D11.lib;d3dcompiler.lib</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)..\lib\msvs10\$(Configuration)\win$(PlatformArchitecture)</AdditionalLibraryDirectories> - <IgnoreSpecificDefaultLibraries> - </IgnoreSpecificDefaultLibraries> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|ORBIS'"> - <ClCompile> - <WarningLevel>Level3</WarningLevel> - <PrecompiledHeader> - </PrecompiledHeader> - <Optimization>MaxSpeed</Optimization> - <FunctionLevelLinking>true</FunctionLevelLinking> - <IntrinsicFunctions>true</IntrinsicFunctions> - <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions> - <AdditionalIncludeDirectories>$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include\libyuv;$(SolutionDir)vp9-dec-core\build;$(SolutionDir)vp9-dec-core;$(SolutionDir)vp9-dec-core\build\ORBIS_Release;$(SolutionDir)..\Thirdparty\VpxThirdParty\libyuv\include;$(SolutionDir)../Thirdparty/amd/mcl/1.6/amdmcl/inc;../libwebm</AdditionalIncludeDirectories> - <RuntimeLibrary>MultiThreaded</RuntimeLibrary> - <OptimizationLevel>Levels</OptimizationLevel> - <LinkTimeOptimization>true</LinkTimeOptimization> - <NoStrictAliasing>false</NoStrictAliasing> - </ClCompile> - <Link> - <SubSystem>Console</SubSystem> - <GenerateDebugInformation>true</GenerateDebugInformation> - <EnableCOMDATFolding>true</EnableCOMDATFolding> - <OptimizeReferences>true</OptimizeReferences> - <AdditionalDependencies>vp9-dec-core$(PlatformArchitecture).a;libSceUserService_stub_weak.a;libScePerf_stub_weak.a;libSceGnmDriver_stub_weak.a;libScePm4Dump.a;libSceGnf.a;libSceShaderBinary.a;libSceGpuAddress.a;libSceGnmx_debug.a;libSceGnm_debug.a;libScePosix_stub_weak.a;libScePad_stub_weak.a;libSceVideoOut_stub_weak.a;%(AdditionalDependencies)</AdditionalDependencies> - <AdditionalLibraryDirectories>$(SolutionDir)lib\$(Configuration);</AdditionalLibraryDirectories> - <IgnoreSpecificDefaultLibraries> - </IgnoreSpecificDefaultLibraries> - </Link> - <PostBuildEvent> - <Command> - </Command> - </PostBuildEvent> - </ItemDefinitionGroup> - <ItemGroup> - <None Include="ReadMe.txt" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="..\..\vp9-dec-core\vpx_mem\sce_mem.h" /> - <ClInclude Include="..\libwebm\mkvparser\mkvparser.h" /> - <ClInclude Include="..\libwebm\mkvparser\mkvreader.h" /> - <ClInclude Include="args.h" /> - <ClInclude Include="ivfdec.h" /> - <ClInclude Include="md5_utils.h" /> - <ClInclude Include="stdafx.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">false</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="targetver.h"> - <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|ORBIS'">true</ExcludedFromBuild> - </ClInclude> - <ClInclude Include="webmdec.h" /> - <ClInclude Include="y4menc.h" /> - </ItemGroup> - <ItemGroup> - <ClCompile Include="..\..\vp9-dec-core\vpx_mem\vpx_mem.c" /> - <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc" /> - <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc" /> - <ClCompile Include="args.c" /> - <ClCompile Include="ivfdec.c" /> - <ClCompile Include="md5_utils.c" /> - <ClCompile Include="stdafx.cpp" /> - <ClCompile Include="tools_common.c" /> - <ClCompile Include="user_malloc.cpp" /> - <ClCompile Include="vpxdec.c" /> - <ClCompile Include="webmdec.cc" /> - <ClCompile Include="y4menc.c" /> - </ItemGroup> - <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> - <ImportGroup Label="ExtensionTargets" /> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj.filters b/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj.filters deleted file mode 100644 index f670f6f..0000000 --- a/src/third_party/libvpx_gpu/vp9-dec-test/vpxdec/vpxdec.vcxproj.filters +++ /dev/null
@@ -1,90 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> - <ItemGroup> - <Filter Include="Source Files"> - <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> - <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> - </Filter> - <Filter Include="Header Files"> - <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> - <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions> - </Filter> - <Filter Include="Resource Files"> - <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> - <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> - </Filter> - </ItemGroup> - <ItemGroup> - <None Include="ReadMe.txt" /> - </ItemGroup> - <ItemGroup> - <ClInclude Include="stdafx.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="targetver.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="args.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="md5_utils.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="y4menc.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="webmdec.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="ivfdec.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\..\vp9-dec-core\vpx_mem\sce_mem.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvparser\mkvparser.h"> - <Filter>Header Files</Filter> - </ClInclude> - <ClInclude Include="..\libwebm\mkvparser\mkvreader.h"> - <Filter>Header Files</Filter> - </ClInclude> - </ItemGroup> - <ItemGroup> - <ClCompile Include="stdafx.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="vpxdec.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="tools_common.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="args.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="md5_utils.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="y4menc.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="webmdec.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="ivfdec.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="user_malloc.cpp"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\..\vp9-dec-core\vpx_mem\vpx_mem.c"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvparser\mkvparser.cc"> - <Filter>Source Files</Filter> - </ClCompile> - <ClCompile Include="..\libwebm\mkvparser\mkvreader.cc"> - <Filter>Source Files</Filter> - </ClCompile> - </ItemGroup> -</Project> \ No newline at end of file
diff --git a/src/third_party/libvpx_gpu/vp9decoder.sln b/src/third_party/libvpx_gpu/vp9decoder.sln deleted file mode 100644 index 87ac9f9..0000000 --- a/src/third_party/libvpx_gpu/vp9decoder.sln +++ /dev/null
@@ -1,97 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.40629.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vp9-dec-core", "vp9-dec-core\build\vpx-dec-core.vcxproj", "{DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vpxdec", "vp9-dec-test\vpxdec\vpxdec.vcxproj", "{427CA27F-0F97-4791-912D-E2499DCAE406}" - ProjectSection(ProjectDependencies) = postProject - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "google-tests", "vp9-dec-test\google-tests\build\test-vp9-dec.vcxproj", "{020D5EB9-D317-46FE-9CEC-557444DCDC6E}" - ProjectSection(ProjectDependencies) = postProject - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{3FD52CF0-07C7-4FFB-B2D1-6D23F366E206}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "luxSimplePlayer", "vp9-dec-test\libSimplePlayer\libSimplePlayer.vcxproj", "{901DB192-225E-48D3-8C4D-015A4DE1F6B4}" - ProjectSection(ProjectDependencies) = postProject - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} - EndProjectSection -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libSceSampleUtil", "vp9-dec-test\PS4\common\source\sampleutil\libSceSampleUtil.vcxproj", "{30A1B994-C2C6-485F-911B-FB4674366DA8}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_toolkit", "vp9-dec-test\PS4\toolkit\toolkit.vcxproj", "{2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_framework", "vp9-dec-test\PS4\framework\framework.vcxproj", "{F950CC65-80EF-4B1F-86A3-2B87B3F23C96}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "_dbg_font", "vp9-dec-test\PS4\dbg_font\dbg_font.vcxproj", "{43565AD8-688C-4451-A81F-2ABA8E957753}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "player", "player", "{1453DBCA-657E-4D99-A391-EDDE23FC4396}" -EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ErrorResilienceTest", "vp9-dec-test\ErrorResilienceTest\ErrorResilienceTest.vcxproj", "{F216E2AC-3265-4071-9F17-709D747FF1D1}" - ProjectSection(ProjectDependencies) = postProject - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} = {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74} - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|ORBIS = Debug|ORBIS - Release|ORBIS = Release|ORBIS - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Debug|ORBIS.Build.0 = Debug|ORBIS - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|ORBIS.ActiveCfg = Release|ORBIS - {DCE19DAF-69AC-46DB-B14A-39F0FAA5DB74}.Release|ORBIS.Build.0 = Release|ORBIS - {427CA27F-0F97-4791-912D-E2499DCAE406}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {427CA27F-0F97-4791-912D-E2499DCAE406}.Debug|ORBIS.Build.0 = Debug|ORBIS - {427CA27F-0F97-4791-912D-E2499DCAE406}.Release|ORBIS.ActiveCfg = Release|ORBIS - {427CA27F-0F97-4791-912D-E2499DCAE406}.Release|ORBIS.Build.0 = Release|ORBIS - {020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Debug|ORBIS.Build.0 = Debug|ORBIS - {020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Release|ORBIS.ActiveCfg = Release|ORBIS - {020D5EB9-D317-46FE-9CEC-557444DCDC6E}.Release|ORBIS.Build.0 = Release|ORBIS - {901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Debug|ORBIS.Build.0 = Debug|ORBIS - {901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Release|ORBIS.ActiveCfg = Release|ORBIS - {901DB192-225E-48D3-8C4D-015A4DE1F6B4}.Release|ORBIS.Build.0 = Release|ORBIS - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Debug|ORBIS.Build.0 = Debug|ORBIS - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.ActiveCfg = Release|ORBIS - {30A1B994-C2C6-485F-911B-FB4674366DA8}.Release|ORBIS.Build.0 = Release|ORBIS - {2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Debug|ORBIS.Build.0 = Debug|ORBIS - {2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Release|ORBIS.ActiveCfg = Release|ORBIS - {2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6}.Release|ORBIS.Build.0 = Release|ORBIS - {F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Debug|ORBIS.Build.0 = Debug|ORBIS - {F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Release|ORBIS.ActiveCfg = Release|ORBIS - {F950CC65-80EF-4B1F-86A3-2B87B3F23C96}.Release|ORBIS.Build.0 = Release|ORBIS - {43565AD8-688C-4451-A81F-2ABA8E957753}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {43565AD8-688C-4451-A81F-2ABA8E957753}.Debug|ORBIS.Build.0 = Debug|ORBIS - {43565AD8-688C-4451-A81F-2ABA8E957753}.Release|ORBIS.ActiveCfg = Release|ORBIS - {43565AD8-688C-4451-A81F-2ABA8E957753}.Release|ORBIS.Build.0 = Release|ORBIS - {F216E2AC-3265-4071-9F17-709D747FF1D1}.Debug|ORBIS.ActiveCfg = Debug|ORBIS - {F216E2AC-3265-4071-9F17-709D747FF1D1}.Debug|ORBIS.Build.0 = Debug|ORBIS - {F216E2AC-3265-4071-9F17-709D747FF1D1}.Release|ORBIS.ActiveCfg = Release|ORBIS - {F216E2AC-3265-4071-9F17-709D747FF1D1}.Release|ORBIS.Build.0 = Release|ORBIS - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {427CA27F-0F97-4791-912D-E2499DCAE406} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206} - {020D5EB9-D317-46FE-9CEC-557444DCDC6E} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206} - {901DB192-225E-48D3-8C4D-015A4DE1F6B4} = {1453DBCA-657E-4D99-A391-EDDE23FC4396} - {30A1B994-C2C6-485F-911B-FB4674366DA8} = {1453DBCA-657E-4D99-A391-EDDE23FC4396} - {2F4CCF89-7649-4C7F-8CBF-F976B4FBC2B6} = {1453DBCA-657E-4D99-A391-EDDE23FC4396} - {F950CC65-80EF-4B1F-86A3-2B87B3F23C96} = {1453DBCA-657E-4D99-A391-EDDE23FC4396} - {43565AD8-688C-4451-A81F-2ABA8E957753} = {1453DBCA-657E-4D99-A391-EDDE23FC4396} - {1453DBCA-657E-4D99-A391-EDDE23FC4396} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206} - {F216E2AC-3265-4071-9F17-709D747FF1D1} = {3FD52CF0-07C7-4FFB-B2D1-6D23F366E206} - EndGlobalSection -EndGlobal
diff --git a/src/third_party/llvm-project/libunwind/libunwind.gyp b/src/third_party/llvm-project/libunwind/libunwind.gyp index 833ca4a..3a32bbd 100644 --- a/src/third_party/llvm-project/libunwind/libunwind.gyp +++ b/src/third_party/llvm-project/libunwind/libunwind.gyp
@@ -20,8 +20,6 @@ 'include_dirs': [ 'include', '<(DEPTH)/third_party/llvm-project/libcxx/include', - '<(DEPTH)/third_party/musl/include', - '<(DEPTH)/third_party/musl/generated/include', ], 'dependencies': [ '<(DEPTH)/starboard/common/common.gyp:common', @@ -86,8 +84,6 @@ 'all_dependent_settings': { 'include_dirs': [ '<(DEPTH)/third_party/llvm-project/libcxx/include', - '<(DEPTH)/third_party/musl/include', - '<(DEPTH)/third_party/musl/generated/include', ], 'defines': [ # Ensure that __external_threading is used for threading support.
diff --git a/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp b/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp index e3a7e40..a2ea283 100644 --- a/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp +++ b/src/third_party/llvm-project/libunwind/src/AddressSpace.hpp
@@ -385,6 +385,9 @@ inline bool LocalAddressSpace::findUnwindSections(pint_t targetAddr, UnwindInfoSections &info) { +#if defined(STARBOARD) + return false; +#endif #ifdef __APPLE__ dyld_unwind_sections dyldInfo; if (_dyld_find_unwind_sections((void *)targetAddr, &dyldInfo)) { @@ -584,6 +587,7 @@ inline bool LocalAddressSpace::findFunctionName(pint_t addr, char *buf, size_t bufLen, unw_word_t *offset) { +#if !defined(STARBOARD) #if _LIBUNWIND_USE_DLADDR Dl_info dyldInfo; if (dladdr((void *)addr, &dyldInfo)) { @@ -594,6 +598,7 @@ } } #endif +#endif return false; }
diff --git a/src/third_party/musl/arch/aarch64/bits/alltypes.h b/src/third_party/musl/arch/aarch64/bits/alltypes.h new file mode 100644 index 0000000..f90365e --- /dev/null +++ b/src/third_party/musl/arch/aarch64/bits/alltypes.h
@@ -0,0 +1,401 @@ +#define _Addr long +#define _Int64 long +#define _Reg long + +#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) +typedef __builtin_va_list va_list; +#define __DEFINED_va_list +#endif + +#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) +typedef __builtin_va_list __isoc_va_list; +#define __DEFINED___isoc_va_list +#endif + + +#ifndef __cplusplus +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef unsigned wchar_t; +#define __DEFINED_wchar_t +#endif + +#endif +#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) +typedef unsigned wint_t; +#define __DEFINED_wint_t +#endif + + +#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) +typedef int blksize_t; +#define __DEFINED_blksize_t +#endif + +#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) +typedef unsigned int nlink_t; +#define __DEFINED_nlink_t +#endif + + +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef float float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef double double_t; +#define __DEFINED_double_t +#endif + + +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + + +#if defined(__NEED_time_t) && !defined(__DEFINED_time_t) +typedef long time_t; +#define __DEFINED_time_t +#endif + +#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t) +typedef long suseconds_t; +#define __DEFINED_suseconds_t +#endif + + +#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t) +typedef struct { union { int __i[14]; volatile int __vi[14]; unsigned long __s[7]; } __u; } pthread_attr_t; +#define __DEFINED_pthread_attr_t +#endif + +#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t) +typedef struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } pthread_mutex_t; +#define __DEFINED_pthread_mutex_t +#endif + +#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t) +typedef struct { union { int __i[10]; volatile int __vi[10]; volatile void *volatile __p[5]; } __u; } mtx_t; +#define __DEFINED_mtx_t +#endif + +#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } pthread_cond_t; +#define __DEFINED_pthread_cond_t +#endif + +#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[6]; } __u; } cnd_t; +#define __DEFINED_cnd_t +#endif + +#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t) +typedef struct { union { int __i[14]; volatile int __vi[14]; void *__p[7]; } __u; } pthread_rwlock_t; +#define __DEFINED_pthread_rwlock_t +#endif + +#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t) +typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[4]; } __u; } pthread_barrier_t; +#define __DEFINED_pthread_barrier_t +#endif + +#if defined(__NEED_size_t) && !defined(__DEFINED_size_t) +typedef unsigned _Addr size_t; +#define __DEFINED_size_t +#endif + +#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t) +typedef unsigned _Addr uintptr_t; +#define __DEFINED_uintptr_t +#endif + +#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t) +typedef _Addr ptrdiff_t; +#define __DEFINED_ptrdiff_t +#endif + +#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t) +typedef _Addr ssize_t; +#define __DEFINED_ssize_t +#endif + +#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t) +typedef _Addr intptr_t; +#define __DEFINED_intptr_t +#endif + +#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t) +typedef _Addr regoff_t; +#define __DEFINED_regoff_t +#endif + +#if defined(__NEED_register_t) && !defined(__DEFINED_register_t) +typedef _Reg register_t; +#define __DEFINED_register_t +#endif + + +#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t) +typedef signed char int8_t; +#define __DEFINED_int8_t +#endif + +#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t) +typedef signed short int16_t; +#define __DEFINED_int16_t +#endif + +#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t) +typedef signed int int32_t; +#define __DEFINED_int32_t +#endif + +#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t) +typedef signed _Int64 int64_t; +#define __DEFINED_int64_t +#endif + +#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t) +typedef signed _Int64 intmax_t; +#define __DEFINED_intmax_t +#endif + +#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t) +typedef unsigned char uint8_t; +#define __DEFINED_uint8_t +#endif + +#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t) +typedef unsigned short uint16_t; +#define __DEFINED_uint16_t +#endif + +#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t) +typedef unsigned int uint32_t; +#define __DEFINED_uint32_t +#endif + +#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t) +typedef unsigned _Int64 uint64_t; +#define __DEFINED_uint64_t +#endif + +#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t) +typedef unsigned _Int64 u_int64_t; +#define __DEFINED_u_int64_t +#endif + +#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t) +typedef unsigned _Int64 uintmax_t; +#define __DEFINED_uintmax_t +#endif + + +#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t) +typedef unsigned mode_t; +#define __DEFINED_mode_t +#endif + +#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) +typedef unsigned _Reg nlink_t; +#define __DEFINED_nlink_t +#endif + +#if defined(__NEED_off_t) && !defined(__DEFINED_off_t) +typedef _Int64 off_t; +#define __DEFINED_off_t +#endif + +#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t) +typedef unsigned _Int64 ino_t; +#define __DEFINED_ino_t +#endif + +#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t) +typedef unsigned _Int64 dev_t; +#define __DEFINED_dev_t +#endif + +#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) +typedef long blksize_t; +#define __DEFINED_blksize_t +#endif + +#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t) +typedef _Int64 blkcnt_t; +#define __DEFINED_blkcnt_t +#endif + +#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t) +typedef unsigned _Int64 fsblkcnt_t; +#define __DEFINED_fsblkcnt_t +#endif + +#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t) +typedef unsigned _Int64 fsfilcnt_t; +#define __DEFINED_fsfilcnt_t +#endif + + +#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) +typedef unsigned wint_t; +#define __DEFINED_wint_t +#endif + +#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t) +typedef unsigned long wctype_t; +#define __DEFINED_wctype_t +#endif + + +#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t) +typedef void * timer_t; +#define __DEFINED_timer_t +#endif + +#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t) +typedef int clockid_t; +#define __DEFINED_clockid_t +#endif + +#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t) +typedef long clock_t; +#define __DEFINED_clock_t +#endif + +#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval) +struct timeval { time_t tv_sec; suseconds_t tv_usec; }; +#define __DEFINED_struct_timeval +#endif + +#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec) +struct timespec { time_t tv_sec; long tv_nsec; }; +#define __DEFINED_struct_timespec +#endif + + +#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t) +typedef int pid_t; +#define __DEFINED_pid_t +#endif + +#if defined(__NEED_id_t) && !defined(__DEFINED_id_t) +typedef unsigned id_t; +#define __DEFINED_id_t +#endif + +#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t) +typedef unsigned uid_t; +#define __DEFINED_uid_t +#endif + +#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t) +typedef unsigned gid_t; +#define __DEFINED_gid_t +#endif + +#if defined(__NEED_key_t) && !defined(__DEFINED_key_t) +typedef int key_t; +#define __DEFINED_key_t +#endif + +#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t) +typedef unsigned useconds_t; +#define __DEFINED_useconds_t +#endif + + +#ifdef __cplusplus +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef unsigned long pthread_t; +#define __DEFINED_pthread_t +#endif + +#else +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef struct __pthread * pthread_t; +#define __DEFINED_pthread_t +#endif + +#endif +#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t) +typedef int pthread_once_t; +#define __DEFINED_pthread_once_t +#endif + +#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t) +typedef unsigned pthread_key_t; +#define __DEFINED_pthread_key_t +#endif + +#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t) +typedef int pthread_spinlock_t; +#define __DEFINED_pthread_spinlock_t +#endif + +#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t) +typedef struct { unsigned __attr; } pthread_mutexattr_t; +#define __DEFINED_pthread_mutexattr_t +#endif + +#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t) +typedef struct { unsigned __attr; } pthread_condattr_t; +#define __DEFINED_pthread_condattr_t +#endif + +#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t) +typedef struct { unsigned __attr; } pthread_barrierattr_t; +#define __DEFINED_pthread_barrierattr_t +#endif + +#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t) +typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t; +#define __DEFINED_pthread_rwlockattr_t +#endif + + +#if defined(__NEED_FILE) && !defined(__DEFINED_FILE) +typedef struct _IO_FILE FILE; +#define __DEFINED_FILE +#endif + + +#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t) +typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t; +#define __DEFINED_mbstate_t +#endif + + +#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t) +typedef struct __locale_struct * locale_t; +#define __DEFINED_locale_t +#endif + + +#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t) +typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t; +#define __DEFINED_sigset_t +#endif + + +#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec) +struct iovec { void *iov_base; size_t iov_len; }; +#define __DEFINED_struct_iovec +#endif + + +#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t) +typedef unsigned socklen_t; +#define __DEFINED_socklen_t +#endif + +#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t) +typedef unsigned short sa_family_t; +#define __DEFINED_sa_family_t +#endif + + +#undef _Addr +#undef _Int64 +#undef _Reg
diff --git a/src/third_party/musl/arch/arm/bits/alltypes.h b/src/third_party/musl/arch/arm/bits/alltypes.h new file mode 100644 index 0000000..f8c6e76 --- /dev/null +++ b/src/third_party/musl/arch/arm/bits/alltypes.h
@@ -0,0 +1,385 @@ +#define _Addr int +#define _Int64 long long +#define _Reg int + +#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) +typedef __builtin_va_list va_list; +#define __DEFINED_va_list +#endif + +#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) +typedef __builtin_va_list __isoc_va_list; +#define __DEFINED___isoc_va_list +#endif + + +#ifndef __cplusplus +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef unsigned wchar_t; +#define __DEFINED_wchar_t +#endif + +#endif + +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef float float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef double double_t; +#define __DEFINED_double_t +#endif + + +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + + +#if defined(__NEED_time_t) && !defined(__DEFINED_time_t) +typedef long time_t; +#define __DEFINED_time_t +#endif + +#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t) +typedef long suseconds_t; +#define __DEFINED_suseconds_t +#endif + + +#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t) +typedef struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t; +#define __DEFINED_pthread_attr_t +#endif + +#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t) +typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t; +#define __DEFINED_pthread_mutex_t +#endif + +#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t) +typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t; +#define __DEFINED_mtx_t +#endif + +#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t; +#define __DEFINED_pthread_cond_t +#endif + +#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t; +#define __DEFINED_cnd_t +#endif + +#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t) +typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t; +#define __DEFINED_pthread_rwlock_t +#endif + +#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t) +typedef struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t; +#define __DEFINED_pthread_barrier_t +#endif + +#if defined(__NEED_size_t) && !defined(__DEFINED_size_t) +typedef unsigned _Addr size_t; +#define __DEFINED_size_t +#endif + +#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t) +typedef unsigned _Addr uintptr_t; +#define __DEFINED_uintptr_t +#endif + +#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t) +typedef _Addr ptrdiff_t; +#define __DEFINED_ptrdiff_t +#endif + +#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t) +typedef _Addr ssize_t; +#define __DEFINED_ssize_t +#endif + +#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t) +typedef _Addr intptr_t; +#define __DEFINED_intptr_t +#endif + +#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t) +typedef _Addr regoff_t; +#define __DEFINED_regoff_t +#endif + +#if defined(__NEED_register_t) && !defined(__DEFINED_register_t) +typedef _Reg register_t; +#define __DEFINED_register_t +#endif + + +#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t) +typedef signed char int8_t; +#define __DEFINED_int8_t +#endif + +#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t) +typedef signed short int16_t; +#define __DEFINED_int16_t +#endif + +#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t) +typedef signed int int32_t; +#define __DEFINED_int32_t +#endif + +#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t) +typedef signed _Int64 int64_t; +#define __DEFINED_int64_t +#endif + +#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t) +typedef signed _Int64 intmax_t; +#define __DEFINED_intmax_t +#endif + +#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t) +typedef unsigned char uint8_t; +#define __DEFINED_uint8_t +#endif + +#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t) +typedef unsigned short uint16_t; +#define __DEFINED_uint16_t +#endif + +#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t) +typedef unsigned int uint32_t; +#define __DEFINED_uint32_t +#endif + +#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t) +typedef unsigned _Int64 uint64_t; +#define __DEFINED_uint64_t +#endif + +#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t) +typedef unsigned _Int64 u_int64_t; +#define __DEFINED_u_int64_t +#endif + +#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t) +typedef unsigned _Int64 uintmax_t; +#define __DEFINED_uintmax_t +#endif + + +#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t) +typedef unsigned mode_t; +#define __DEFINED_mode_t +#endif + +#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) +typedef unsigned _Reg nlink_t; +#define __DEFINED_nlink_t +#endif + +#if defined(__NEED_off_t) && !defined(__DEFINED_off_t) +typedef _Int64 off_t; +#define __DEFINED_off_t +#endif + +#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t) +typedef unsigned _Int64 ino_t; +#define __DEFINED_ino_t +#endif + +#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t) +typedef unsigned _Int64 dev_t; +#define __DEFINED_dev_t +#endif + +#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) +typedef long blksize_t; +#define __DEFINED_blksize_t +#endif + +#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t) +typedef _Int64 blkcnt_t; +#define __DEFINED_blkcnt_t +#endif + +#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t) +typedef unsigned _Int64 fsblkcnt_t; +#define __DEFINED_fsblkcnt_t +#endif + +#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t) +typedef unsigned _Int64 fsfilcnt_t; +#define __DEFINED_fsfilcnt_t +#endif + + +#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) +typedef unsigned wint_t; +#define __DEFINED_wint_t +#endif + +#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t) +typedef unsigned long wctype_t; +#define __DEFINED_wctype_t +#endif + + +#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t) +typedef void * timer_t; +#define __DEFINED_timer_t +#endif + +#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t) +typedef int clockid_t; +#define __DEFINED_clockid_t +#endif + +#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t) +typedef long clock_t; +#define __DEFINED_clock_t +#endif + +#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval) +struct timeval { time_t tv_sec; suseconds_t tv_usec; }; +#define __DEFINED_struct_timeval +#endif + +#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec) +struct timespec { time_t tv_sec; long tv_nsec; }; +#define __DEFINED_struct_timespec +#endif + + +#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t) +typedef int pid_t; +#define __DEFINED_pid_t +#endif + +#if defined(__NEED_id_t) && !defined(__DEFINED_id_t) +typedef unsigned id_t; +#define __DEFINED_id_t +#endif + +#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t) +typedef unsigned uid_t; +#define __DEFINED_uid_t +#endif + +#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t) +typedef unsigned gid_t; +#define __DEFINED_gid_t +#endif + +#if defined(__NEED_key_t) && !defined(__DEFINED_key_t) +typedef int key_t; +#define __DEFINED_key_t +#endif + +#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t) +typedef unsigned useconds_t; +#define __DEFINED_useconds_t +#endif + + +#ifdef __cplusplus +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef unsigned long pthread_t; +#define __DEFINED_pthread_t +#endif + +#else +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef struct __pthread * pthread_t; +#define __DEFINED_pthread_t +#endif + +#endif +#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t) +typedef int pthread_once_t; +#define __DEFINED_pthread_once_t +#endif + +#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t) +typedef unsigned pthread_key_t; +#define __DEFINED_pthread_key_t +#endif + +#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t) +typedef int pthread_spinlock_t; +#define __DEFINED_pthread_spinlock_t +#endif + +#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t) +typedef struct { unsigned __attr; } pthread_mutexattr_t; +#define __DEFINED_pthread_mutexattr_t +#endif + +#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t) +typedef struct { unsigned __attr; } pthread_condattr_t; +#define __DEFINED_pthread_condattr_t +#endif + +#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t) +typedef struct { unsigned __attr; } pthread_barrierattr_t; +#define __DEFINED_pthread_barrierattr_t +#endif + +#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t) +typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t; +#define __DEFINED_pthread_rwlockattr_t +#endif + + +#if defined(__NEED_FILE) && !defined(__DEFINED_FILE) +typedef struct _IO_FILE FILE; +#define __DEFINED_FILE +#endif + + +#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t) +typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t; +#define __DEFINED_mbstate_t +#endif + + +#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t) +typedef struct __locale_struct * locale_t; +#define __DEFINED_locale_t +#endif + + +#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t) +typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t; +#define __DEFINED_sigset_t +#endif + + +#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec) +struct iovec { void *iov_base; size_t iov_len; }; +#define __DEFINED_struct_iovec +#endif + + +#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t) +typedef unsigned socklen_t; +#define __DEFINED_socklen_t +#endif + +#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t) +typedef unsigned short sa_family_t; +#define __DEFINED_sa_family_t +#endif + + +#undef _Addr +#undef _Int64 +#undef _Reg
diff --git a/src/third_party/musl/arch/i386/bits/alltypes.h b/src/third_party/musl/arch/i386/bits/alltypes.h new file mode 100644 index 0000000..6bbc3ab --- /dev/null +++ b/src/third_party/musl/arch/i386/bits/alltypes.h
@@ -0,0 +1,433 @@ +#define _Addr int +#define _Int64 long long +#define _Reg int + +#if __GNUC__ >= 3 +#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) +typedef __builtin_va_list va_list; +#define __DEFINED_va_list +#endif + +#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) +typedef __builtin_va_list __isoc_va_list; +#define __DEFINED___isoc_va_list +#endif + +#else +#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) +typedef struct __va_list * va_list; +#define __DEFINED_va_list +#endif + +#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) +typedef struct __va_list * __isoc_va_list; +#define __DEFINED___isoc_va_list +#endif + +#endif + +#ifndef __cplusplus +#ifdef __WCHAR_TYPE__ +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef __WCHAR_TYPE__ wchar_t; +#define __DEFINED_wchar_t +#endif + +#else +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef long wchar_t; +#define __DEFINED_wchar_t +#endif + +#endif +#endif + +#if defined(__FLT_EVAL_METHOD__) && __FLT_EVAL_METHOD__ == 0 +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef float float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef double double_t; +#define __DEFINED_double_t +#endif + +#else +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef long double float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef long double double_t; +#define __DEFINED_double_t +#endif + +#endif + +#if !defined(__cplusplus) +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { _Alignas(8) long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + +#elif defined(__GNUC__) +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { __attribute__((__aligned__(8))) long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + +#else +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { alignas(8) long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + +#endif + +#if defined(__NEED_time_t) && !defined(__DEFINED_time_t) +typedef long time_t; +#define __DEFINED_time_t +#endif + +#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t) +typedef long suseconds_t; +#define __DEFINED_suseconds_t +#endif + + +#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t) +typedef struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t; +#define __DEFINED_pthread_attr_t +#endif + +#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t) +typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t; +#define __DEFINED_pthread_mutex_t +#endif + +#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t) +typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t; +#define __DEFINED_mtx_t +#endif + +#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t; +#define __DEFINED_pthread_cond_t +#endif + +#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t; +#define __DEFINED_cnd_t +#endif + +#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t) +typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t; +#define __DEFINED_pthread_rwlock_t +#endif + +#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t) +typedef struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t; +#define __DEFINED_pthread_barrier_t +#endif + +#if defined(__NEED_size_t) && !defined(__DEFINED_size_t) +typedef unsigned _Addr size_t; +#define __DEFINED_size_t +#endif + +#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t) +typedef unsigned _Addr uintptr_t; +#define __DEFINED_uintptr_t +#endif + +#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t) +typedef _Addr ptrdiff_t; +#define __DEFINED_ptrdiff_t +#endif + +#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t) +typedef _Addr ssize_t; +#define __DEFINED_ssize_t +#endif + +#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t) +typedef _Addr intptr_t; +#define __DEFINED_intptr_t +#endif + +#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t) +typedef _Addr regoff_t; +#define __DEFINED_regoff_t +#endif + +#if defined(__NEED_register_t) && !defined(__DEFINED_register_t) +typedef _Reg register_t; +#define __DEFINED_register_t +#endif + + +#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t) +typedef signed char int8_t; +#define __DEFINED_int8_t +#endif + +#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t) +typedef signed short int16_t; +#define __DEFINED_int16_t +#endif + +#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t) +typedef signed int int32_t; +#define __DEFINED_int32_t +#endif + +#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t) +typedef signed _Int64 int64_t; +#define __DEFINED_int64_t +#endif + +#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t) +typedef signed _Int64 intmax_t; +#define __DEFINED_intmax_t +#endif + +#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t) +typedef unsigned char uint8_t; +#define __DEFINED_uint8_t +#endif + +#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t) +typedef unsigned short uint16_t; +#define __DEFINED_uint16_t +#endif + +#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t) +typedef unsigned int uint32_t; +#define __DEFINED_uint32_t +#endif + +#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t) +typedef unsigned _Int64 uint64_t; +#define __DEFINED_uint64_t +#endif + +#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t) +typedef unsigned _Int64 u_int64_t; +#define __DEFINED_u_int64_t +#endif + +#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t) +typedef unsigned _Int64 uintmax_t; +#define __DEFINED_uintmax_t +#endif + + +#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t) +typedef unsigned mode_t; +#define __DEFINED_mode_t +#endif + +#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) +typedef unsigned _Reg nlink_t; +#define __DEFINED_nlink_t +#endif + +#if defined(__NEED_off_t) && !defined(__DEFINED_off_t) +typedef _Int64 off_t; +#define __DEFINED_off_t +#endif + +#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t) +typedef unsigned _Int64 ino_t; +#define __DEFINED_ino_t +#endif + +#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t) +typedef unsigned _Int64 dev_t; +#define __DEFINED_dev_t +#endif + +#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) +typedef long blksize_t; +#define __DEFINED_blksize_t +#endif + +#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t) +typedef _Int64 blkcnt_t; +#define __DEFINED_blkcnt_t +#endif + +#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t) +typedef unsigned _Int64 fsblkcnt_t; +#define __DEFINED_fsblkcnt_t +#endif + +#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t) +typedef unsigned _Int64 fsfilcnt_t; +#define __DEFINED_fsfilcnt_t +#endif + + +#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) +typedef unsigned wint_t; +#define __DEFINED_wint_t +#endif + +#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t) +typedef unsigned long wctype_t; +#define __DEFINED_wctype_t +#endif + + +#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t) +typedef void * timer_t; +#define __DEFINED_timer_t +#endif + +#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t) +typedef int clockid_t; +#define __DEFINED_clockid_t +#endif + +#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t) +typedef long clock_t; +#define __DEFINED_clock_t +#endif + +#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval) +struct timeval { time_t tv_sec; suseconds_t tv_usec; }; +#define __DEFINED_struct_timeval +#endif + +#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec) +struct timespec { time_t tv_sec; long tv_nsec; }; +#define __DEFINED_struct_timespec +#endif + + +#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t) +typedef int pid_t; +#define __DEFINED_pid_t +#endif + +#if defined(__NEED_id_t) && !defined(__DEFINED_id_t) +typedef unsigned id_t; +#define __DEFINED_id_t +#endif + +#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t) +typedef unsigned uid_t; +#define __DEFINED_uid_t +#endif + +#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t) +typedef unsigned gid_t; +#define __DEFINED_gid_t +#endif + +#if defined(__NEED_key_t) && !defined(__DEFINED_key_t) +typedef int key_t; +#define __DEFINED_key_t +#endif + +#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t) +typedef unsigned useconds_t; +#define __DEFINED_useconds_t +#endif + + +#ifdef __cplusplus +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef unsigned long pthread_t; +#define __DEFINED_pthread_t +#endif + +#else +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef struct __pthread * pthread_t; +#define __DEFINED_pthread_t +#endif + +#endif +#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t) +typedef int pthread_once_t; +#define __DEFINED_pthread_once_t +#endif + +#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t) +typedef unsigned pthread_key_t; +#define __DEFINED_pthread_key_t +#endif + +#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t) +typedef int pthread_spinlock_t; +#define __DEFINED_pthread_spinlock_t +#endif + +#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t) +typedef struct { unsigned __attr; } pthread_mutexattr_t; +#define __DEFINED_pthread_mutexattr_t +#endif + +#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t) +typedef struct { unsigned __attr; } pthread_condattr_t; +#define __DEFINED_pthread_condattr_t +#endif + +#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t) +typedef struct { unsigned __attr; } pthread_barrierattr_t; +#define __DEFINED_pthread_barrierattr_t +#endif + +#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t) +typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t; +#define __DEFINED_pthread_rwlockattr_t +#endif + + +#if defined(__NEED_FILE) && !defined(__DEFINED_FILE) +typedef struct _IO_FILE FILE; +#define __DEFINED_FILE +#endif + + +#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t) +typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t; +#define __DEFINED_mbstate_t +#endif + + +#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t) +typedef struct __locale_struct * locale_t; +#define __DEFINED_locale_t +#endif + + +#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t) +typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t; +#define __DEFINED_sigset_t +#endif + + +#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec) +struct iovec { void *iov_base; size_t iov_len; }; +#define __DEFINED_struct_iovec +#endif + + +#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t) +typedef unsigned socklen_t; +#define __DEFINED_socklen_t +#endif + +#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t) +typedef unsigned short sa_family_t; +#define __DEFINED_sa_family_t +#endif + + +#undef _Addr +#undef _Int64 +#undef _Reg
diff --git a/src/third_party/musl/arch/mips/bits/alltypes.h b/src/third_party/musl/arch/mips/bits/alltypes.h new file mode 100644 index 0000000..2d70952 --- /dev/null +++ b/src/third_party/musl/arch/mips/bits/alltypes.h
@@ -0,0 +1,385 @@ +#define _Addr int +#define _Int64 long long +#define _Reg int + +#if defined(__NEED_va_list) && !defined(__DEFINED_va_list) +typedef __builtin_va_list va_list; +#define __DEFINED_va_list +#endif + +#if defined(__NEED___isoc_va_list) && !defined(__DEFINED___isoc_va_list) +typedef __builtin_va_list __isoc_va_list; +#define __DEFINED___isoc_va_list +#endif + + +#ifndef __cplusplus +#if defined(__NEED_wchar_t) && !defined(__DEFINED_wchar_t) +typedef int wchar_t; +#define __DEFINED_wchar_t +#endif + +#endif + +#if defined(__NEED_float_t) && !defined(__DEFINED_float_t) +typedef float float_t; +#define __DEFINED_float_t +#endif + +#if defined(__NEED_double_t) && !defined(__DEFINED_double_t) +typedef double double_t; +#define __DEFINED_double_t +#endif + + +#if defined(__NEED_max_align_t) && !defined(__DEFINED_max_align_t) +typedef struct { long long __ll; long double __ld; } max_align_t; +#define __DEFINED_max_align_t +#endif + + +#if defined(__NEED_time_t) && !defined(__DEFINED_time_t) +typedef long time_t; +#define __DEFINED_time_t +#endif + +#if defined(__NEED_suseconds_t) && !defined(__DEFINED_suseconds_t) +typedef long suseconds_t; +#define __DEFINED_suseconds_t +#endif + + +#if defined(__NEED_pthread_attr_t) && !defined(__DEFINED_pthread_attr_t) +typedef struct { union { int __i[9]; volatile int __vi[9]; unsigned __s[9]; } __u; } pthread_attr_t; +#define __DEFINED_pthread_attr_t +#endif + +#if defined(__NEED_pthread_mutex_t) && !defined(__DEFINED_pthread_mutex_t) +typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } pthread_mutex_t; +#define __DEFINED_pthread_mutex_t +#endif + +#if defined(__NEED_mtx_t) && !defined(__DEFINED_mtx_t) +typedef struct { union { int __i[6]; volatile int __vi[6]; volatile void *volatile __p[6]; } __u; } mtx_t; +#define __DEFINED_mtx_t +#endif + +#if defined(__NEED_pthread_cond_t) && !defined(__DEFINED_pthread_cond_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } pthread_cond_t; +#define __DEFINED_pthread_cond_t +#endif + +#if defined(__NEED_cnd_t) && !defined(__DEFINED_cnd_t) +typedef struct { union { int __i[12]; volatile int __vi[12]; void *__p[12]; } __u; } cnd_t; +#define __DEFINED_cnd_t +#endif + +#if defined(__NEED_pthread_rwlock_t) && !defined(__DEFINED_pthread_rwlock_t) +typedef struct { union { int __i[8]; volatile int __vi[8]; void *__p[8]; } __u; } pthread_rwlock_t; +#define __DEFINED_pthread_rwlock_t +#endif + +#if defined(__NEED_pthread_barrier_t) && !defined(__DEFINED_pthread_barrier_t) +typedef struct { union { int __i[5]; volatile int __vi[5]; void *__p[5]; } __u; } pthread_barrier_t; +#define __DEFINED_pthread_barrier_t +#endif + +#if defined(__NEED_size_t) && !defined(__DEFINED_size_t) +typedef unsigned _Addr size_t; +#define __DEFINED_size_t +#endif + +#if defined(__NEED_uintptr_t) && !defined(__DEFINED_uintptr_t) +typedef unsigned _Addr uintptr_t; +#define __DEFINED_uintptr_t +#endif + +#if defined(__NEED_ptrdiff_t) && !defined(__DEFINED_ptrdiff_t) +typedef _Addr ptrdiff_t; +#define __DEFINED_ptrdiff_t +#endif + +#if defined(__NEED_ssize_t) && !defined(__DEFINED_ssize_t) +typedef _Addr ssize_t; +#define __DEFINED_ssize_t +#endif + +#if defined(__NEED_intptr_t) && !defined(__DEFINED_intptr_t) +typedef _Addr intptr_t; +#define __DEFINED_intptr_t +#endif + +#if defined(__NEED_regoff_t) && !defined(__DEFINED_regoff_t) +typedef _Addr regoff_t; +#define __DEFINED_regoff_t +#endif + +#if defined(__NEED_register_t) && !defined(__DEFINED_register_t) +typedef _Reg register_t; +#define __DEFINED_register_t +#endif + + +#if defined(__NEED_int8_t) && !defined(__DEFINED_int8_t) +typedef signed char int8_t; +#define __DEFINED_int8_t +#endif + +#if defined(__NEED_int16_t) && !defined(__DEFINED_int16_t) +typedef signed short int16_t; +#define __DEFINED_int16_t +#endif + +#if defined(__NEED_int32_t) && !defined(__DEFINED_int32_t) +typedef signed int int32_t; +#define __DEFINED_int32_t +#endif + +#if defined(__NEED_int64_t) && !defined(__DEFINED_int64_t) +typedef signed _Int64 int64_t; +#define __DEFINED_int64_t +#endif + +#if defined(__NEED_intmax_t) && !defined(__DEFINED_intmax_t) +typedef signed _Int64 intmax_t; +#define __DEFINED_intmax_t +#endif + +#if defined(__NEED_uint8_t) && !defined(__DEFINED_uint8_t) +typedef unsigned char uint8_t; +#define __DEFINED_uint8_t +#endif + +#if defined(__NEED_uint16_t) && !defined(__DEFINED_uint16_t) +typedef unsigned short uint16_t; +#define __DEFINED_uint16_t +#endif + +#if defined(__NEED_uint32_t) && !defined(__DEFINED_uint32_t) +typedef unsigned int uint32_t; +#define __DEFINED_uint32_t +#endif + +#if defined(__NEED_uint64_t) && !defined(__DEFINED_uint64_t) +typedef unsigned _Int64 uint64_t; +#define __DEFINED_uint64_t +#endif + +#if defined(__NEED_u_int64_t) && !defined(__DEFINED_u_int64_t) +typedef unsigned _Int64 u_int64_t; +#define __DEFINED_u_int64_t +#endif + +#if defined(__NEED_uintmax_t) && !defined(__DEFINED_uintmax_t) +typedef unsigned _Int64 uintmax_t; +#define __DEFINED_uintmax_t +#endif + + +#if defined(__NEED_mode_t) && !defined(__DEFINED_mode_t) +typedef unsigned mode_t; +#define __DEFINED_mode_t +#endif + +#if defined(__NEED_nlink_t) && !defined(__DEFINED_nlink_t) +typedef unsigned _Reg nlink_t; +#define __DEFINED_nlink_t +#endif + +#if defined(__NEED_off_t) && !defined(__DEFINED_off_t) +typedef _Int64 off_t; +#define __DEFINED_off_t +#endif + +#if defined(__NEED_ino_t) && !defined(__DEFINED_ino_t) +typedef unsigned _Int64 ino_t; +#define __DEFINED_ino_t +#endif + +#if defined(__NEED_dev_t) && !defined(__DEFINED_dev_t) +typedef unsigned _Int64 dev_t; +#define __DEFINED_dev_t +#endif + +#if defined(__NEED_blksize_t) && !defined(__DEFINED_blksize_t) +typedef long blksize_t; +#define __DEFINED_blksize_t +#endif + +#if defined(__NEED_blkcnt_t) && !defined(__DEFINED_blkcnt_t) +typedef _Int64 blkcnt_t; +#define __DEFINED_blkcnt_t +#endif + +#if defined(__NEED_fsblkcnt_t) && !defined(__DEFINED_fsblkcnt_t) +typedef unsigned _Int64 fsblkcnt_t; +#define __DEFINED_fsblkcnt_t +#endif + +#if defined(__NEED_fsfilcnt_t) && !defined(__DEFINED_fsfilcnt_t) +typedef unsigned _Int64 fsfilcnt_t; +#define __DEFINED_fsfilcnt_t +#endif + + +#if defined(__NEED_wint_t) && !defined(__DEFINED_wint_t) +typedef unsigned wint_t; +#define __DEFINED_wint_t +#endif + +#if defined(__NEED_wctype_t) && !defined(__DEFINED_wctype_t) +typedef unsigned long wctype_t; +#define __DEFINED_wctype_t +#endif + + +#if defined(__NEED_timer_t) && !defined(__DEFINED_timer_t) +typedef void * timer_t; +#define __DEFINED_timer_t +#endif + +#if defined(__NEED_clockid_t) && !defined(__DEFINED_clockid_t) +typedef int clockid_t; +#define __DEFINED_clockid_t +#endif + +#if defined(__NEED_clock_t) && !defined(__DEFINED_clock_t) +typedef long clock_t; +#define __DEFINED_clock_t +#endif + +#if defined(__NEED_struct_timeval) && !defined(__DEFINED_struct_timeval) +struct timeval { time_t tv_sec; suseconds_t tv_usec; }; +#define __DEFINED_struct_timeval +#endif + +#if defined(__NEED_struct_timespec) && !defined(__DEFINED_struct_timespec) +struct timespec { time_t tv_sec; long tv_nsec; }; +#define __DEFINED_struct_timespec +#endif + + +#if defined(__NEED_pid_t) && !defined(__DEFINED_pid_t) +typedef int pid_t; +#define __DEFINED_pid_t +#endif + +#if defined(__NEED_id_t) && !defined(__DEFINED_id_t) +typedef unsigned id_t; +#define __DEFINED_id_t +#endif + +#if defined(__NEED_uid_t) && !defined(__DEFINED_uid_t) +typedef unsigned uid_t; +#define __DEFINED_uid_t +#endif + +#if defined(__NEED_gid_t) && !defined(__DEFINED_gid_t) +typedef unsigned gid_t; +#define __DEFINED_gid_t +#endif + +#if defined(__NEED_key_t) && !defined(__DEFINED_key_t) +typedef int key_t; +#define __DEFINED_key_t +#endif + +#if defined(__NEED_useconds_t) && !defined(__DEFINED_useconds_t) +typedef unsigned useconds_t; +#define __DEFINED_useconds_t +#endif + + +#ifdef __cplusplus +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef unsigned long pthread_t; +#define __DEFINED_pthread_t +#endif + +#else +#if defined(__NEED_pthread_t) && !defined(__DEFINED_pthread_t) +typedef struct __pthread * pthread_t; +#define __DEFINED_pthread_t +#endif + +#endif +#if defined(__NEED_pthread_once_t) && !defined(__DEFINED_pthread_once_t) +typedef int pthread_once_t; +#define __DEFINED_pthread_once_t +#endif + +#if defined(__NEED_pthread_key_t) && !defined(__DEFINED_pthread_key_t) +typedef unsigned pthread_key_t; +#define __DEFINED_pthread_key_t +#endif + +#if defined(__NEED_pthread_spinlock_t) && !defined(__DEFINED_pthread_spinlock_t) +typedef int pthread_spinlock_t; +#define __DEFINED_pthread_spinlock_t +#endif + +#if defined(__NEED_pthread_mutexattr_t) && !defined(__DEFINED_pthread_mutexattr_t) +typedef struct { unsigned __attr; } pthread_mutexattr_t; +#define __DEFINED_pthread_mutexattr_t +#endif + +#if defined(__NEED_pthread_condattr_t) && !defined(__DEFINED_pthread_condattr_t) +typedef struct { unsigned __attr; } pthread_condattr_t; +#define __DEFINED_pthread_condattr_t +#endif + +#if defined(__NEED_pthread_barrierattr_t) && !defined(__DEFINED_pthread_barrierattr_t) +typedef struct { unsigned __attr; } pthread_barrierattr_t; +#define __DEFINED_pthread_barrierattr_t +#endif + +#if defined(__NEED_pthread_rwlockattr_t) && !defined(__DEFINED_pthread_rwlockattr_t) +typedef struct { unsigned __attr[2]; } pthread_rwlockattr_t; +#define __DEFINED_pthread_rwlockattr_t +#endif + + +#if defined(__NEED_FILE) && !defined(__DEFINED_FILE) +typedef struct _IO_FILE FILE; +#define __DEFINED_FILE +#endif + + +#if defined(__NEED_mbstate_t) && !defined(__DEFINED_mbstate_t) +typedef struct __mbstate_t { unsigned __opaque1, __opaque2; } mbstate_t; +#define __DEFINED_mbstate_t +#endif + + +#if defined(__NEED_locale_t) && !defined(__DEFINED_locale_t) +typedef struct __locale_struct * locale_t; +#define __DEFINED_locale_t +#endif + + +#if defined(__NEED_sigset_t) && !defined(__DEFINED_sigset_t) +typedef struct __sigset_t { unsigned long __bits[128/sizeof(long)]; } sigset_t; +#define __DEFINED_sigset_t +#endif + + +#if defined(__NEED_struct_iovec) && !defined(__DEFINED_struct_iovec) +struct iovec { void *iov_base; size_t iov_len; }; +#define __DEFINED_struct_iovec +#endif + + +#if defined(__NEED_socklen_t) && !defined(__DEFINED_socklen_t) +typedef unsigned socklen_t; +#define __DEFINED_socklen_t +#endif + +#if defined(__NEED_sa_family_t) && !defined(__DEFINED_sa_family_t) +typedef unsigned short sa_family_t; +#define __DEFINED_sa_family_t +#endif + + +#undef _Addr +#undef _Int64 +#undef _Reg
diff --git a/src/third_party/musl/generated/include/bits/alltypes.h b/src/third_party/musl/arch/x86_64/bits/alltypes.h similarity index 100% rename from src/third_party/musl/generated/include/bits/alltypes.h rename to src/third_party/musl/arch/x86_64/bits/alltypes.h
diff --git a/src/third_party/musl/generate.sh b/src/third_party/musl/generate.sh new file mode 100755 index 0000000..a3d7285 --- /dev/null +++ b/src/third_party/musl/generate.sh
@@ -0,0 +1,8 @@ +#!/bin/bash + +sed -f tools/mkalltypes.sed arch/aarch64/bits/alltypes.h.in include/alltypes.h.in > arch/aarch64/bits/alltypes.h +sed -f tools/mkalltypes.sed arch/arm/bits/alltypes.h.in include/alltypes.h.in > arch/arm/bits/alltypes.h +sed -f tools/mkalltypes.sed arch/x86_64/bits/alltypes.h.in include/alltypes.h.in > arch/x86_64/bits/alltypes.h +sed -f tools/mkalltypes.sed arch/i386/bits/alltypes.h.in include/alltypes.h.in > arch/i386/bits/alltypes.h +sed -f tools/mkalltypes.sed arch/mips/bits/alltypes.h.in include/alltypes.h.in > arch/mips/bits/alltypes.h +
diff --git a/src/third_party/musl/generated/README.md b/src/third_party/musl/generated/README.md deleted file mode 100644 index ae1726d..0000000 --- a/src/third_party/musl/generated/README.md +++ /dev/null
@@ -1,4 +0,0 @@ -This directory contains generated headers made by -running "./configure && make" on a stock Google Rodete machine. - -TODO: Generate these via the Cobalt gyp build.
diff --git a/src/third_party/musl/musl.gyp b/src/third_party/musl/musl.gyp index 58afe2f..895e07f 100644 --- a/src/third_party/musl/musl.gyp +++ b/src/third_party/musl/musl.gyp
@@ -57,7 +57,6 @@ '-isystem<(DEPTH)/third_party/musl/include', '-isystem<(DEPTH)/third_party/musl/arch/x86_64', '-isystem<(DEPTH)/third_party/musl/arch/generic', - '-isystem<(DEPTH)/third_party/musl/generated/include', '-w', ], 'direct_dependent_settings': { @@ -77,19 +76,25 @@ 'conditions': [ ['musl_arch in ["i386", "x86_64", "aarch64"]', { 'sources': [ - 'src/fenv/<(musl_arch)/fenv.s' + 'src/fenv/<(musl_arch)/fenv.s', + 'src/setjmp/<(musl_arch)/setjmp.s', + 'src/setjmp/<(musl_arch)/longjmp.s', ], }], ['musl_arch == "arm"', { 'sources': [ 'src/fenv/arm/fenv.c', - 'src/fenv/arm/fenv-hf.S' + 'src/fenv/arm/fenv-hf.S', + 'src/setjmp/<(musl_arch)/setjmp.s', + 'src/setjmp/<(musl_arch)/longjmp.s', ], }], ['musl_arch == "mips"', { 'sources': [ 'src/fenv/mips/fenv.S,', - 'src/fenv/mips/fenv-sf.c' + 'src/fenv/mips/fenv-sf.c', + 'src/setjmp/<(musl_arch)/setjmp.S', + 'src/setjmp/<(musl_arch)/longjmp.S', ], }], ['musl_arch in ["i386", "x86_64"]', { @@ -123,6 +128,7 @@ 'src/starboard/ctype/__ctype_get_mb_cur_max.c', 'src/starboard/errno/__errno_location.c', 'src/starboard/exit/abort.c', + 'src/starboard/hwcap/sethwcap.c', 'src/starboard/locale/freelocale.c', 'src/starboard/locale/langinfo.c', 'src/starboard/locale/localeconv.c',
diff --git a/src/third_party/musl/src/math/rint.c b/src/third_party/musl/src/math/rint.c index dd14bf6..54414b5 100644 --- a/src/third_party/musl/src/math/rint.c +++ b/src/third_party/musl/src/math/rint.c
@@ -1,6 +1,7 @@ #include <float.h> #include <math.h> #include <stdint.h> +#include "libc.h" #if FLT_EVAL_METHOD==0 || FLT_EVAL_METHOD==1 #define EPS DBL_EPSILON @@ -31,3 +32,7 @@ return s ? -0.0 : 0; return y; } + +#ifdef COBALT_MUSL_W_GLIBC_HEADERS +weak_alias(rint_internal, rint); +#endif // COBALT_MUSL_W_GLIBC_HEADERS
diff --git a/src/third_party/musl/src/starboard/hwcap/sethwcap.c b/src/third_party/musl/src/starboard/hwcap/sethwcap.c new file mode 100644 index 0000000..8f54cd6 --- /dev/null +++ b/src/third_party/musl/src/starboard/hwcap/sethwcap.c
@@ -0,0 +1,15 @@ +#include "hwcap_impl.h" +#include "libc.h" +#include "starboard/cpu_features.h" + +size_t __hwcap; + +// Set __hwcap bitmask by Starboard CPU features API. +void init_musl_hwcap() { + SbCPUFeatures features; + if (SbCPUFeaturesGet(&features)) { + __hwcap = features.hwcap; + } else { + __hwcap = 0; + } +}
diff --git a/src/third_party/musl/src/starboard/internal/hwcap_impl.h b/src/third_party/musl/src/starboard/internal/hwcap_impl.h new file mode 100644 index 0000000..4039e08 --- /dev/null +++ b/src/third_party/musl/src/starboard/internal/hwcap_impl.h
@@ -0,0 +1,14 @@ +#ifndef _HWCAP_IMPL_H_ +#define _HWCAP_IMPL_H_ + +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +void init_musl_hwcap(); + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif
diff --git a/src/v8/gypfiles/toolchain.gypi b/src/v8/gypfiles/toolchain.gypi index fce4d07..14183a9 100644 --- a/src/v8/gypfiles/toolchain.gypi +++ b/src/v8/gypfiles/toolchain.gypi
@@ -158,12 +158,14 @@ }], ], 'target_defaults': { - 'ldflags_host': [ - # mksnapshot can not be compiled on host machine with default clang - # linker. - '-fuse-ld=lld', - ], 'conditions': [ + ['clang==1', { + 'ldflags_host': [ + # mksnapshot can not be compiled on host machine with default clang + # linker. + '-fuse-ld=lld', + ], + }], ['v8_target_arch=="arm"', { 'defines': [ 'V8_TARGET_ARCH_ARM',
diff --git a/src/v8/src/builtins/builtins-regexp-gen.cc b/src/v8/src/builtins/builtins-regexp-gen.cc index 4227c62..34e8af9 100644 --- a/src/v8/src/builtins/builtins-regexp-gen.cc +++ b/src/v8/src/builtins/builtins-regexp-gen.cc
@@ -2022,10 +2022,7 @@ Node* const result_fixed_array = LoadElements(result); Node* const match = LoadFixedArrayElement(result_fixed_array, 0); - // The match is guaranteed to be a string on the fast path. - CSA_ASSERT(this, IsString(match)); - - var_match.Bind(match); + var_match.Bind(ToString_Inline(context, match)); Goto(&if_didmatch); }
diff --git a/src/v8/src/regexp/regexp-utils.cc b/src/v8/src/regexp/regexp-utils.cc index d483125..4030ad4 100644 --- a/src/v8/src/regexp/regexp-utils.cc +++ b/src/v8/src/regexp/regexp-utils.cc
@@ -35,7 +35,7 @@ namespace { -V8_INLINE bool HasInitialRegExpMap(Isolate* isolate, Handle<JSReceiver> recv) { +V8_INLINE bool HasInitialRegExpMap(Isolate* isolate, JSReceiver* recv) { return recv->map() == isolate->regexp_function()->initial_map(); } @@ -46,7 +46,7 @@ uint64_t value) { Handle<Object> value_as_object = isolate->factory()->NewNumberFromInt64(value); - if (HasInitialRegExpMap(isolate, recv)) { + if (HasInitialRegExpMap(isolate, *recv)) { JSRegExp::cast(*recv)->set_last_index(*value_as_object, SKIP_WRITE_BARRIER); return recv; } else { @@ -57,7 +57,7 @@ MaybeHandle<Object> RegExpUtils::GetLastIndex(Isolate* isolate, Handle<JSReceiver> recv) { - if (HasInitialRegExpMap(isolate, recv)) { + if (HasInitialRegExpMap(isolate, *recv)) { return handle(JSRegExp::cast(*recv)->last_index(), isolate); } else { return Object::GetProperty(recv, isolate->factory()->lastIndex_string()); @@ -142,9 +142,7 @@ JSReceiver* recv = JSReceiver::cast(*obj); - // Check the receiver's map. - Handle<JSFunction> regexp_function = isolate->regexp_function(); - if (recv->map() != regexp_function->initial_map()) return false; + if (!HasInitialRegExpMap(isolate, recv)) return false; // Check the receiver's prototype's map. Object* proto = recv->map()->prototype();
diff --git a/src/v8/src/runtime/runtime-regexp.cc b/src/v8/src/runtime/runtime-regexp.cc index d0afcd2..135853a 100644 --- a/src/v8/src/runtime/runtime-regexp.cc +++ b/src/v8/src/runtime/runtime-regexp.cc
@@ -1303,10 +1303,9 @@ MUST_USE_RESULT MaybeHandle<String> RegExpReplace(Isolate* isolate, Handle<JSRegExp> regexp, Handle<String> string, - Handle<Object> replace_obj) { + Handle<String> replace) { // Functional fast-paths are dispatched directly by replace builtin. DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, regexp)); - DCHECK(!replace_obj->IsCallable()); Factory* factory = isolate->factory(); @@ -1314,9 +1313,6 @@ const bool global = (flags & JSRegExp::kGlobal) != 0; const bool sticky = (flags & JSRegExp::kSticky) != 0; - Handle<String> replace; - ASSIGN_RETURN_ON_EXCEPTION(isolate, replace, - Object::ToString(isolate, replace_obj), String); replace = String::Flatten(replace); Handle<RegExpMatchInfo> last_match_info = isolate->regexp_last_match_info(); @@ -1411,18 +1407,23 @@ CONVERT_ARG_HANDLE_CHECKED(String, subject, 1); CONVERT_ARG_HANDLE_CHECKED(RegExpMatchInfo, last_match_info, 2); CONVERT_ARG_HANDLE_CHECKED(JSArray, result_array, 3); + + DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, regexp)); CHECK(result_array->HasObjectElements()); subject = String::Flatten(subject); CHECK(regexp->GetFlags() & JSRegExp::kGlobal); + Object* result; if (regexp->CaptureCount() == 0) { - return SearchRegExpMultiple<false>(isolate, subject, regexp, - last_match_info, result_array); + result = SearchRegExpMultiple<false>(isolate, subject, regexp, + last_match_info, result_array); } else { - return SearchRegExpMultiple<true>(isolate, subject, regexp, last_match_info, - result_array); + result = SearchRegExpMultiple<true>(isolate, subject, regexp, + last_match_info, result_array); } + DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, regexp)); + return result; } RUNTIME_FUNCTION(Runtime_StringReplaceNonGlobalRegExpWithFunction) { @@ -1737,14 +1738,6 @@ string = String::Flatten(string); - // Fast-path for unmodified JSRegExps. - if (RegExpUtils::IsUnmodifiedRegExp(isolate, recv)) { - RETURN_RESULT_OR_FAILURE( - isolate, RegExpReplace(isolate, Handle<JSRegExp>::cast(recv), string, - replace_obj)); - } - - const uint32_t length = string->length(); const bool functional_replace = replace_obj->IsCallable(); Handle<String> replace; @@ -1753,6 +1746,21 @@ Object::ToString(isolate, replace_obj)); } + // Fast-path for unmodified JSRegExps (and non-functional replace). + if (RegExpUtils::IsUnmodifiedRegExp(isolate, recv)) { + // We should never get here with functional replace because unmodified + // regexp and functional replace should be fully handled in CSA code. + CHECK(!functional_replace); + Handle<Object> result; + ASSIGN_RETURN_FAILURE_ON_EXCEPTION( + isolate, result, + RegExpReplace(isolate, Handle<JSRegExp>::cast(recv), string, replace)); + DCHECK(RegExpUtils::IsUnmodifiedRegExp(isolate, recv)); + return *result; + } + + const uint32_t length = string->length(); + Handle<Object> global_obj; ASSIGN_RETURN_FAILURE_ON_EXCEPTION( isolate, global_obj,
diff --git a/src/v8/src/wasm/baseline/liftoff-compiler.cc b/src/v8/src/wasm/baseline/liftoff-compiler.cc index 255ee03..0acbc07 100644 --- a/src/v8/src/wasm/baseline/liftoff-compiler.cc +++ b/src/v8/src/wasm/baseline/liftoff-compiler.cc
@@ -62,8 +62,13 @@ class LiftoffCompiler { public: + // This was causing cascading build errors when compiling v8 for the older + // clang compilers.Some private variables of this class have their move + // constructor implicitly deleted. Trying to fix that causes a chain of + // deleting the move constructor for multiple classes. +#if !defined(V8_OS_STARBOARD) MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(LiftoffCompiler); - +#endif // TODO(clemensh): Make this a template parameter. static constexpr wasm::Decoder::ValidateFlag validate = wasm::Decoder::kValidate;
diff --git a/src/v8/src/wasm/wasm-debug.cc b/src/v8/src/wasm/wasm-debug.cc index 87995df..60366bd 100644 --- a/src/v8/src/wasm/wasm-debug.cc +++ b/src/v8/src/wasm/wasm-debug.cc
@@ -92,7 +92,13 @@ } class InterpreterHandle { + // This was causing cascading build errors when compiling v8 for the older + // clang compilers.Some private variables of this class have their move + // constructor implicitly deleted. Trying to fix that causes a chain of + // deleting the move constructor for multiple classes. +#if !defined(V8_OS_STARBOARD) MOVE_ONLY_NO_DEFAULT_CONSTRUCTOR(InterpreterHandle); +#endif Isolate* isolate_; const WasmModule* module_; WasmInterpreter interpreter_;
diff --git a/src/v8/src/x64/assembler-x64.cc b/src/v8/src/x64/assembler-x64.cc index c8f326e..1b768de 100644 --- a/src/v8/src/x64/assembler-x64.cc +++ b/src/v8/src/x64/assembler-x64.cc
@@ -36,9 +36,10 @@ namespace { -#if !V8_LIBC_MSVCRT - -V8_INLINE uint64_t _xgetbv(unsigned int xcr) { +V8_INLINE uint64_t xgetbv(unsigned int xcr) { +#if V8_LIBC_MSVCRT + return _xgetbv(xcr); +#else unsigned eax, edx; // Check xgetbv; this uses a .byte sequence instead of the instruction // directly because older assemblers do not include support for xgetbv and @@ -46,13 +47,9 @@ // used. __asm__ volatile(".byte 0x0F, 0x01, 0xD0" : "=a"(eax), "=d"(edx) : "c"(xcr)); return static_cast<uint64_t>(eax) | (static_cast<uint64_t>(edx) << 32); +#endif } -#define _XCR_XFEATURE_ENABLED_MASK 0 - -#endif // !V8_LIBC_MSVCRT - - bool OSHasAVXSupport() { #if V8_OS_MACOSX // Mac OS X up to 10.9 has a bug where AVX transitions were indeed being @@ -72,7 +69,7 @@ if (kernel_version_major <= 13) return false; #endif // V8_OS_MACOSX // Check whether OS claims to support AVX. - uint64_t feature_mask = _xgetbv(_XCR_XFEATURE_ENABLED_MASK); + uint64_t feature_mask = xgetbv(0); // XCR_XFEATURE_ENABLED_MASK return (feature_mask & 0x6) == 0x6; }