Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BASE_METRICS_HISTOGRAM_PERSISTENCE_H_ | 5 #ifndef BASE_METRICS_HISTOGRAM_PERSISTENCE_H_ |
| 6 #define BASE_METRICS_HISTOGRAM_PERSISTENCE_H_ | 6 #define BASE_METRICS_HISTOGRAM_PERSISTENCE_H_ |
| 7 | 7 |
| 8 #include <map> | 8 #include <map> |
| 9 #include <memory> | 9 #include <memory> |
| 10 | 10 |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 387 StringPiece name); | 387 StringPiece name); |
| 388 | 388 |
| 389 // Create a global allocator using an internal block of memory of the | 389 // Create a global allocator using an internal block of memory of the |
| 390 // specified |size| taken from the heap. | 390 // specified |size| taken from the heap. |
| 391 static void CreateWithLocalMemory(size_t size, uint64_t id, StringPiece name); | 391 static void CreateWithLocalMemory(size_t size, uint64_t id, StringPiece name); |
| 392 | 392 |
| 393 #if !defined(OS_NACL) | 393 #if !defined(OS_NACL) |
| 394 // Create a global allocator by memory-mapping a |file|. If the file does | 394 // Create a global allocator by memory-mapping a |file|. If the file does |
| 395 // not exist, it will be created with the specified |size|. If the file does | 395 // not exist, it will be created with the specified |size|. If the file does |
| 396 // exist, the allocator will use and add to its contents, ignoring the passed | 396 // exist, the allocator will use and add to its contents, ignoring the passed |
| 397 // size in favor of the existing size. | 397 // size in favor of the existing size. Returns whether the global allocator |
| 398 static void CreateWithFile(const FilePath& file_path, | 398 // was set. |
| 399 static bool CreateWithFile(const FilePath& file_path, | |
| 399 size_t size, | 400 size_t size, |
| 400 uint64_t id, | 401 uint64_t id, |
| 401 StringPiece name); | 402 StringPiece name); |
| 403 | |
| 404 // Creates a new file at |active_path|. If it already exists, it will first be | |
| 405 // moved to |base_path|. In all cases, any old file at |base_path| will be | |
| 406 // removed. The file will be created using the given size, id, and name. | |
| 407 // Returns whether the global allocator was set. | |
| 408 static bool CreateWithActiveFile(const FilePath& base_path, | |
| 409 const FilePath& active_path, | |
| 410 size_t size, | |
| 411 uint64_t id, | |
| 412 StringPiece name); | |
| 413 | |
| 414 // Uses ConstructBaseActivePairFilePaths() to build a pair of file names which | |
| 415 // are then used for CreateWithActiveFile(). | |
|
bcwhite
2016/09/14 21:11:29
Note that |name| will be used for both the interna
scottmg
2016/09/14 22:12:30
Done.
| |
| 416 static bool CreateWithActiveFileInDir(const FilePath& dir, | |
| 417 size_t size, | |
| 418 uint64_t id, | |
| 419 StringPiece name); | |
| 420 | |
| 421 // Constructs a pair of names in |dir| based on name that can be used for a | |
| 422 // base + active persistent memory mapped location for CreateWithActiveFile(). | |
| 423 static void ConstructBaseActivePairFilePaths(const FilePath& dir, | |
|
bcwhite
2016/09/14 21:11:30
How about shortening this method to just ContructF
scottmg
2016/09/14 22:12:31
Done.
| |
| 424 StringPiece name, | |
| 425 FilePath* out_base_path, | |
| 426 FilePath* out_active_path); | |
| 402 #endif | 427 #endif |
| 403 | 428 |
| 404 // Create a global allocator using a block of shared |memory| of the | 429 // Create a global allocator using a block of shared |memory| of the |
| 405 // specified |size|. The allocator takes ownership of the shared memory | 430 // specified |size|. The allocator takes ownership of the shared memory |
| 406 // and releases it upon destruction, though the memory will continue to | 431 // and releases it upon destruction, though the memory will continue to |
| 407 // live if other processes have access to it. | 432 // live if other processes have access to it. |
| 408 static void CreateWithSharedMemory(std::unique_ptr<SharedMemory> memory, | 433 static void CreateWithSharedMemory(std::unique_ptr<SharedMemory> memory, |
| 409 size_t size, | 434 size_t size, |
| 410 uint64_t id, | 435 uint64_t id, |
| 411 StringPiece name); | 436 StringPiece name); |
| (...skipping 30 matching lines...) Expand all Loading... | |
| 442 // Retrieves a previously set pathname to which the contents of this allocator | 467 // Retrieves a previously set pathname to which the contents of this allocator |
| 443 // are to be saved. | 468 // are to be saved. |
| 444 const FilePath& GetPersistentLocation() const; | 469 const FilePath& GetPersistentLocation() const; |
| 445 | 470 |
| 446 // Writes the internal data to a previously set location. This is generally | 471 // Writes the internal data to a previously set location. This is generally |
| 447 // called when a process is exiting from a section of code that may not know | 472 // called when a process is exiting from a section of code that may not know |
| 448 // the filesystem. The data is written in an atomic manner. The return value | 473 // the filesystem. The data is written in an atomic manner. The return value |
| 449 // indicates success. | 474 // indicates success. |
| 450 bool WriteToPersistentLocation(); | 475 bool WriteToPersistentLocation(); |
| 451 | 476 |
| 477 // If there is a global metrics file being updated on disk, mark it to be | |
| 478 // deleted when the process exits. A normal shutdown is almost complete so | |
|
bcwhite
2016/09/14 21:11:30
Comment needs updating for its new location. A sh
scottmg
2016/09/14 22:12:31
Done.
| |
| 479 // there is no benefit in keeping a file with no new data to be processed | |
| 480 // during the next startup sequence. Deleting the file during shutdown adds an | |
| 481 // extra disk-access or two to shutdown but eliminates the unnecessary | |
| 482 // processing of the contents during startup only to find nothing. | |
| 483 void DeletePersistentLocation(); | |
| 484 | |
| 452 private: | 485 private: |
| 453 friend class StatisticsRecorder; | 486 friend class StatisticsRecorder; |
| 454 | 487 |
| 455 // Creates a new global histogram allocator. | 488 // Creates a new global histogram allocator. |
| 456 explicit GlobalHistogramAllocator( | 489 explicit GlobalHistogramAllocator( |
| 457 std::unique_ptr<PersistentMemoryAllocator> memory); | 490 std::unique_ptr<PersistentMemoryAllocator> memory); |
| 458 | 491 |
| 459 // Import new histograms from the global histogram allocator. It's possible | 492 // Import new histograms from the global histogram allocator. It's possible |
| 460 // for other processes to create histograms in the active memory segment; | 493 // for other processes to create histograms in the active memory segment; |
| 461 // this adds those to the internal list of known histograms to avoid creating | 494 // this adds those to the internal list of known histograms to avoid creating |
| 462 // duplicates that would have to be merged during reporting. Every call to | 495 // duplicates that would have to be merged during reporting. Every call to |
| 463 // this method resumes from the last entry it saw; it costs nothing if | 496 // this method resumes from the last entry it saw; it costs nothing if |
| 464 // nothing new has been added. | 497 // nothing new has been added. |
| 465 void ImportHistogramsToStatisticsRecorder(); | 498 void ImportHistogramsToStatisticsRecorder(); |
| 466 | 499 |
| 467 // Import always continues from where it left off, making use of a single | 500 // Import always continues from where it left off, making use of a single |
| 468 // iterator to continue the work. | 501 // iterator to continue the work. |
| 469 Iterator import_iterator_; | 502 Iterator import_iterator_; |
| 470 | 503 |
| 471 // The location to which the data should be persisted. | 504 // The location to which the data should be persisted. |
| 472 FilePath persistent_location_; | 505 FilePath persistent_location_; |
| 473 | 506 |
| 474 DISALLOW_COPY_AND_ASSIGN(GlobalHistogramAllocator); | 507 DISALLOW_COPY_AND_ASSIGN(GlobalHistogramAllocator); |
| 475 }; | 508 }; |
| 476 | 509 |
| 477 } // namespace base | 510 } // namespace base |
| 478 | 511 |
| 479 #endif // BASE_METRICS_HISTOGRAM_PERSISTENCE_H_ | 512 #endif // BASE_METRICS_HISTOGRAM_PERSISTENCE_H_ |
| OLD | NEW |