OLD | NEW |
1 // Copyright (c) 2008, Google Inc. | 1 // Copyright (c) 2008, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // | 3 // |
4 // Redistribution and use in source and binary forms, with or without | 4 // Redistribution and use in source and binary forms, with or without |
5 // modification, are permitted provided that the following conditions are | 5 // modification, are permitted provided that the following conditions are |
6 // met: | 6 // met: |
7 // | 7 // |
8 // * Redistributions of source code must retain the above copyright | 8 // * Redistributions of source code must retain the above copyright |
9 // notice, this list of conditions and the following disclaimer. | 9 // notice, this list of conditions and the following disclaimer. |
10 // * Redistributions in binary form must reproduce the above | 10 // * Redistributions in binary form must reproduce the above |
(...skipping 18 matching lines...) Expand all Loading... |
29 | 29 |
30 // --- | 30 // --- |
31 // All Rights Reserved. | 31 // All Rights Reserved. |
32 // | 32 // |
33 // Author: Daniel Ford | 33 // Author: Daniel Ford |
34 | 34 |
35 #ifndef TCMALLOC_SAMPLER_H_ | 35 #ifndef TCMALLOC_SAMPLER_H_ |
36 #define TCMALLOC_SAMPLER_H_ | 36 #define TCMALLOC_SAMPLER_H_ |
37 | 37 |
38 #include "config.h" | 38 #include "config.h" |
39 #include "common.h" | 39 #include <stddef.h> // for size_t |
40 #include "static_vars.h" | 40 #ifdef HAVE_STDINT_H |
| 41 #include <stdint.h> // for uint64_t, uint32_t, int32_t |
| 42 #endif |
| 43 #include <string.h> // for memcpy |
| 44 #include "base/basictypes.h" // for ASSERT |
| 45 #include "internal_logging.h" // for ASSERT |
41 | 46 |
42 namespace tcmalloc { | 47 namespace tcmalloc { |
43 | 48 |
44 //------------------------------------------------------------------- | 49 //------------------------------------------------------------------- |
45 // Sampler to decide when to create a sample trace for an allocation | 50 // Sampler to decide when to create a sample trace for an allocation |
46 // Not thread safe: Each thread should have it's own sampler object. | 51 // Not thread safe: Each thread should have it's own sampler object. |
47 // Caller must use external synchronization if used | 52 // Caller must use external synchronization if used |
48 // from multiple threads. | 53 // from multiple threads. |
49 // | 54 // |
50 // With 512K average sample step (the default): | 55 // With 512K average sample step (the default): |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 memcpy(&x, &d, sizeof(x)); // we depend on the compiler inlining this | 170 memcpy(&x, &d, sizeof(x)); // we depend on the compiler inlining this |
166 const uint32_t x_high = x >> 32; | 171 const uint32_t x_high = x >> 32; |
167 const uint32_t y = x_high >> (20 - kFastlogNumBits) & kFastlogMask; | 172 const uint32_t y = x_high >> (20 - kFastlogNumBits) & kFastlogMask; |
168 const int32_t exponent = ((x_high >> 20) & 0x7FF) - 1023; | 173 const int32_t exponent = ((x_high >> 20) & 0x7FF) - 1023; |
169 return exponent + log_table_[y]; | 174 return exponent + log_table_[y]; |
170 } | 175 } |
171 | 176 |
172 } // namespace tcmalloc | 177 } // namespace tcmalloc |
173 | 178 |
174 #endif // TCMALLOC_SAMPLER_H_ | 179 #endif // TCMALLOC_SAMPLER_H_ |
OLD | NEW |