Export of internal Abseil changes
-- 8e04df6fcbd062e5eaf179a6ec9b0a26f8aa8a39 by Abseil Team <absl-team@google.com>: Use a floating point type for the example usage of absl::uniform_real_distribution. PiperOrigin-RevId: 271167776 -- 5f8f1dfea50bc16a9d9af3e50c4636500a938b29 by Abseil Team <absl-team@google.com>: the llvm wasm backend does not support this data symbol in text section, so remove it from the test. PiperOrigin-RevId: 271138100 -- 2874542cb212962ac3093fd78fd5e1eb85c126c0 by Xiaoyi Zhang <zhangxy@google.com>: Work around MSVC 2019 compiler bug related to constexpr in optional_test. The change in optional_test is necessary to avoid another bug on MSVC complaining about accessing invalid member of union, and also makes the test more reasonale by checking the value of a non-static member. Filed a bug against MSVC https://developercommunity.visualstudio.com/content/problem/743998/internal-compiler-error-related-to-constexpr-and-u.html. PiperOrigin-RevId: 271129805 -- 3a5d56f0c3362aabf68938fb95c4e2d3eca59538 by Abseil Team <absl-team@google.com>: Improve precision of absl::GetCurrentTimeNanos() by adjusting cycle time sooner. PiperOrigin-RevId: 271007945 -- 1e044a6dec7c0ca150fff1aee52dbdb16aa43ed7 by Abseil Team <absl-team@google.com>: Internal change. PiperOrigin-RevId: 270962690 GitOrigin-RevId: 8e04df6fcbd062e5eaf179a6ec9b0a26f8aa8a39 Change-Id: Icb05423a7e93ebdae16baadd59a60b75b5cfa249
This commit is contained in:
		
							parent
							
								
									ccdd1d57b6
								
							
						
					
					
						commit
						502efe6d78
					
				
					 7 changed files with 23 additions and 11 deletions
				
			
		|  | @ -2239,6 +2239,13 @@ TEST(Btree, MoveAssignmentAllocatorPropagation) { | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | TEST(Btree, EmptyTree) { | ||||||
|  |   absl::btree_set<int> s; | ||||||
|  |   EXPECT_TRUE(s.empty()); | ||||||
|  |   EXPECT_EQ(s.size(), 0); | ||||||
|  |   EXPECT_GT(s.max_size(), 0); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| }  // namespace
 | }  // namespace
 | ||||||
| }  // namespace container_internal
 | }  // namespace container_internal
 | ||||||
| }  // namespace absl
 | }  // namespace absl
 | ||||||
|  |  | ||||||
|  | @ -1226,7 +1226,7 @@ class btree { | ||||||
|   // The height of the btree. An empty tree will have height 0.
 |   // The height of the btree. An empty tree will have height 0.
 | ||||||
|   size_type height() const { |   size_type height() const { | ||||||
|     size_type h = 0; |     size_type h = 0; | ||||||
|     if (root()) { |     if (!empty()) { | ||||||
|       // Count the length of the chain from the leftmost node up to the
 |       // Count the length of the chain from the leftmost node up to the
 | ||||||
|       // root. We actually count from the root back around to the level below
 |       // root. We actually count from the root back around to the level below
 | ||||||
|       // the root, but the calculation is the same because of the circularity
 |       // the root, but the calculation is the same because of the circularity
 | ||||||
|  | @ -1277,16 +1277,17 @@ class btree { | ||||||
|   // divided by the maximum number of elements a tree with the current number
 |   // divided by the maximum number of elements a tree with the current number
 | ||||||
|   // of nodes could hold. A value of 1 indicates perfect space
 |   // of nodes could hold. A value of 1 indicates perfect space
 | ||||||
|   // utilization. Smaller values indicate space wastage.
 |   // utilization. Smaller values indicate space wastage.
 | ||||||
|  |   // Returns 0 for empty trees.
 | ||||||
|   double fullness() const { |   double fullness() const { | ||||||
|  |     if (empty()) return 0.0; | ||||||
|     return static_cast<double>(size()) / (nodes() * kNodeValues); |     return static_cast<double>(size()) / (nodes() * kNodeValues); | ||||||
|   } |   } | ||||||
|   // The overhead of the btree structure in bytes per node. Computed as the
 |   // The overhead of the btree structure in bytes per node. Computed as the
 | ||||||
|   // total number of bytes used by the btree minus the number of bytes used for
 |   // total number of bytes used by the btree minus the number of bytes used for
 | ||||||
|   // storing elements divided by the number of elements.
 |   // storing elements divided by the number of elements.
 | ||||||
|  |   // Returns 0 for empty trees.
 | ||||||
|   double overhead() const { |   double overhead() const { | ||||||
|     if (empty()) { |     if (empty()) return 0.0; | ||||||
|       return 0.0; |  | ||||||
|     } |  | ||||||
|     return (bytes_used() - size() * sizeof(value_type)) / |     return (bytes_used() - size() * sizeof(value_type)) / | ||||||
|            static_cast<double>(size()); |            static_cast<double>(size()); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  | @ -80,6 +80,7 @@ static ABSL_PER_THREAD_TLS_KEYWORD char | ||||||
|     symbolize_test_thread_big[2 * 1024 * 1024]; |     symbolize_test_thread_big[2 * 1024 * 1024]; | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #if !defined(__EMSCRIPTEN__) | ||||||
| // Used below to hopefully inhibit some compiler/linker optimizations
 | // Used below to hopefully inhibit some compiler/linker optimizations
 | ||||||
| // that may remove kHpageTextPadding, kPadding0, and kPadding1 from
 | // that may remove kHpageTextPadding, kPadding0, and kPadding1 from
 | ||||||
| // the binary.
 | // the binary.
 | ||||||
|  | @ -89,6 +90,7 @@ static volatile bool volatile_bool = false; | ||||||
| static constexpr size_t kHpageSize = 1 << 21; | static constexpr size_t kHpageSize = 1 << 21; | ||||||
| const char kHpageTextPadding[kHpageSize * 4] ABSL_ATTRIBUTE_SECTION_VARIABLE( | const char kHpageTextPadding[kHpageSize * 4] ABSL_ATTRIBUTE_SECTION_VARIABLE( | ||||||
|     .text) = ""; |     .text) = ""; | ||||||
|  | #endif  // !defined(__EMSCRIPTEN__)
 | ||||||
| 
 | 
 | ||||||
| static char try_symbolize_buffer[4096]; | static char try_symbolize_buffer[4096]; | ||||||
| 
 | 
 | ||||||
|  | @ -498,10 +500,12 @@ TEST(Symbolize, Unimplemented) { | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| int main(int argc, char **argv) { | int main(int argc, char **argv) { | ||||||
|  | #if !defined(__EMSCRIPTEN__) | ||||||
|   // Make sure kHpageTextPadding is linked into the binary.
 |   // Make sure kHpageTextPadding is linked into the binary.
 | ||||||
|   if (volatile_bool) { |   if (volatile_bool) { | ||||||
|     ABSL_RAW_LOG(INFO, "%s", kHpageTextPadding); |     ABSL_RAW_LOG(INFO, "%s", kHpageTextPadding); | ||||||
|   } |   } | ||||||
|  | #endif  // !defined(__EMSCRIPTEN__)
 | ||||||
| 
 | 
 | ||||||
| #if ABSL_PER_THREAD_TLS | #if ABSL_PER_THREAD_TLS | ||||||
|   // Touch the per-thread variables.
 |   // Touch the per-thread variables.
 | ||||||
|  |  | ||||||
|  | @ -56,7 +56,7 @@ namespace absl { | ||||||
| //
 | //
 | ||||||
| //   // Use the distribution to produce a value between 0.0 (inclusive)
 | //   // Use the distribution to produce a value between 0.0 (inclusive)
 | ||||||
| //   // and 1.0 (exclusive).
 | //   // and 1.0 (exclusive).
 | ||||||
| //   int value = absl::uniform_real_distribution<double>(0, 1)(gen);
 | //   double value = absl::uniform_real_distribution<double>(0, 1)(gen);
 | ||||||
| //
 | //
 | ||||||
| template <typename RealType = double> | template <typename RealType = double> | ||||||
| class uniform_real_distribution { | class uniform_real_distribution { | ||||||
|  |  | ||||||
|  | @ -449,7 +449,7 @@ static uint64_t UpdateLastSample(uint64_t now_cycles, uint64_t now_ns, | ||||||
|     last_sample.min_cycles_per_sample.store(0, std::memory_order_relaxed); |     last_sample.min_cycles_per_sample.store(0, std::memory_order_relaxed); | ||||||
|     stats_initializations++; |     stats_initializations++; | ||||||
|   } else if (sample->raw_ns + 500 * 1000 * 1000 < now_ns && |   } else if (sample->raw_ns + 500 * 1000 * 1000 < now_ns && | ||||||
|              sample->base_cycles + 100 < now_cycles) { |              sample->base_cycles + 50 < now_cycles) { | ||||||
|     // Enough time has passed to compute the cycle time.
 |     // Enough time has passed to compute the cycle time.
 | ||||||
|     if (sample->nsscaled_per_cycle != 0) {  // Have a cycle time estimate.
 |     if (sample->nsscaled_per_cycle != 0) {  // Have a cycle time estimate.
 | ||||||
|       // Compute time from counter reading, but avoiding overflow
 |       // Compute time from counter reading, but avoiding overflow
 | ||||||
|  |  | ||||||
|  | @ -84,8 +84,8 @@ class optional_data_dtor_base { | ||||||
|   bool engaged_; |   bool engaged_; | ||||||
|   // Data storage
 |   // Data storage
 | ||||||
|   union { |   union { | ||||||
|     dummy_type dummy_; |  | ||||||
|     T data_; |     T data_; | ||||||
|  |     dummy_type dummy_; | ||||||
|   }; |   }; | ||||||
| 
 | 
 | ||||||
|   void destruct() noexcept { |   void destruct() noexcept { | ||||||
|  | @ -119,8 +119,8 @@ class optional_data_dtor_base<T, true> { | ||||||
|   bool engaged_; |   bool engaged_; | ||||||
|   // Data storage
 |   // Data storage
 | ||||||
|   union { |   union { | ||||||
|     dummy_type dummy_; |  | ||||||
|     T data_; |     T data_; | ||||||
|  |     dummy_type dummy_; | ||||||
|   }; |   }; | ||||||
|   void destruct() noexcept { engaged_ = false; } |   void destruct() noexcept { engaged_ = false; } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -944,7 +944,7 @@ TEST(optionalTest, Swap) { | ||||||
| 
 | 
 | ||||||
| template <int v> | template <int v> | ||||||
| struct DeletedOpAddr { | struct DeletedOpAddr { | ||||||
|   constexpr static const int value = v; |   int value = v; | ||||||
|   constexpr DeletedOpAddr() = default; |   constexpr DeletedOpAddr() = default; | ||||||
|   constexpr const DeletedOpAddr<v>* operator&() const = delete;  // NOLINT
 |   constexpr const DeletedOpAddr<v>* operator&() const = delete;  // NOLINT
 | ||||||
|   DeletedOpAddr<v>* operator&() = delete;                        // NOLINT
 |   DeletedOpAddr<v>* operator&() = delete;                        // NOLINT
 | ||||||
|  | @ -954,9 +954,9 @@ struct DeletedOpAddr { | ||||||
| // to document the fact that the current implementation of absl::optional<T>
 | // to document the fact that the current implementation of absl::optional<T>
 | ||||||
| // expects such usecases to be malformed and not compile.
 | // expects such usecases to be malformed and not compile.
 | ||||||
| TEST(optionalTest, OperatorAddr) { | TEST(optionalTest, OperatorAddr) { | ||||||
|   constexpr const int v = -1; |   constexpr int v = -1; | ||||||
|   {  // constexpr
 |   {  // constexpr
 | ||||||
|     constexpr const absl::optional<DeletedOpAddr<v>> opt(absl::in_place_t{}); |     constexpr absl::optional<DeletedOpAddr<v>> opt(absl::in_place_t{}); | ||||||
|     static_assert(opt.has_value(), ""); |     static_assert(opt.has_value(), ""); | ||||||
|     // static_assert(opt->value == v, "");
 |     // static_assert(opt->value == v, "");
 | ||||||
|     static_assert((*opt).value == v, ""); |     static_assert((*opt).value == v, ""); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue