Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(165)

Unified Diff: ash/content/display/display_color_manager_chromeos.cc

Issue 1129863003: Load ICC file for display color correction based on display product identifier (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Nuked extra {} Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/content/display/display_color_manager_chromeos.h ('k') | chromeos/chromeos_paths.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ash/content/display/display_color_manager_chromeos.cc
diff --git a/ash/content/display/display_color_manager_chromeos.cc b/ash/content/display/display_color_manager_chromeos.cc
index 0d7252f87399c8726e09611d5804a9d30233e9a1..9692e6243b80629790f3650b239b0fcdb64c65bd 100644
--- a/ash/content/display/display_color_manager_chromeos.cc
+++ b/ash/content/display/display_color_manager_chromeos.cc
@@ -8,7 +8,11 @@
#include "base/bind_helpers.h"
#include "base/command_line.h"
#include "base/files/file_path.h"
+#include "base/format_macros.h"
#include "base/logging.h"
+#include "base/path_service.h"
+#include "base/strings/stringprintf.h"
+#include "chromeos/chromeos_paths.h"
#include "chromeos/chromeos_switches.h"
#include "content/public/browser/browser_thread.h"
#include "third_party/qcms/src/qcms.h"
@@ -58,12 +62,31 @@ bool ParseFile(const base::FilePath& path,
return true;
}
+base::FilePath PathForDisplaySnapshot(const ui::DisplaySnapshot* snapshot) {
+ if (snapshot->display_id() == gfx::Display::InternalDisplayId()) {
+ const base::CommandLine* command_line =
+ base::CommandLine::ForCurrentProcess();
+ if (command_line->HasSwitch(
+ chromeos::switches::kInternalDisplayColorProfileFile)) {
+ const base::FilePath& path = command_line->GetSwitchValuePath(
+ chromeos::switches::kInternalDisplayColorProfileFile);
+ return base::FilePath(path);
+ }
+ }
+
+ base::FilePath path;
+ CHECK(
+ PathService::Get(chromeos::DIR_DEVICE_COLOR_CALIBRATION_PROFILES, &path));
+ path = path.Append(
+ base::StringPrintf("%08" PRIx64 ".icc", snapshot->product_id()));
+ return path;
+}
+
} // namespace
DisplayColorManager::DisplayColorManager(ui::DisplayConfigurator* configurator)
: configurator_(configurator) {
configurator_->AddObserver(this);
- LoadInternalFromCommandLine();
}
DisplayColorManager::~DisplayColorManager() {
@@ -77,56 +100,57 @@ DisplayColorManager::~DisplayColorManager() {
void DisplayColorManager::OnDisplayModeChanged(
const ui::DisplayConfigurator::DisplayStateList& display_states) {
- for (const ui::DisplaySnapshot* state : display_states)
- ApplyDisplayColorCalibration(state->display_id());
+ for (const ui::DisplaySnapshot* state : display_states) {
+ if (calibration_map_[state->product_id()]) {
+ ApplyDisplayColorCalibration(state->display_id(), state->product_id());
+ } else {
+ if (state->product_id() != ui::DisplaySnapshot::kInvalidProductID)
+ LoadCalibrationForDisplay(state);
+ }
+ }
}
-void DisplayColorManager::ApplyDisplayColorCalibration(uint64_t display_id) {
- if (calibration_map_.find(display_id) != calibration_map_.end()) {
- ColorCalibrationData* ramp = calibration_map_[display_id];
+void DisplayColorManager::ApplyDisplayColorCalibration(int64_t display_id,
+ int64_t product_id) {
+ if (calibration_map_.find(product_id) != calibration_map_.end()) {
+ ColorCalibrationData* ramp = calibration_map_[product_id];
if (!configurator_->SetGammaRamp(display_id, ramp->lut))
LOG(WARNING) << "Error applying gamma ramp";
}
}
-void DisplayColorManager::LoadInternalFromCommandLine() {
- const base::CommandLine* command_line =
- base::CommandLine::ForCurrentProcess();
- if (command_line->HasSwitch(
- chromeos::switches::kInternalDisplayColorProfileFile)) {
- const base::FilePath& path = command_line->GetSwitchValuePath(
- chromeos::switches::kInternalDisplayColorProfileFile);
- VLOG(1) << "Loading ICC file : " << path.value()
- << "for internal display id: " << gfx::Display::InternalDisplayId();
- LoadCalibrationForDisplay(gfx::Display::InternalDisplayId(), path);
- }
-}
-
void DisplayColorManager::LoadCalibrationForDisplay(
- int64_t display_id,
- const base::FilePath& path) {
- if (display_id == gfx::Display::kInvalidDisplayID) {
+ const ui::DisplaySnapshot* display) {
+ if (display->display_id() == gfx::Display::kInvalidDisplayID) {
LOG(WARNING) << "Trying to load calibration data for invalid display id";
return;
}
+ base::FilePath path = PathForDisplaySnapshot(display);
+ VLOG(1) << "Loading ICC file " << path.value()
+ << " for display id: " << display->display_id()
+ << " with product id: " << display->product_id();
+
scoped_ptr<ColorCalibrationData> data(new ColorCalibrationData());
base::Callback<bool(void)> request(
base::Bind(&ParseFile, path, base::Unretained(data.get())));
base::PostTaskAndReplyWithResult(
BrowserThread::GetBlockingPool(), FROM_HERE, request,
base::Bind(&DisplayColorManager::UpdateCalibrationData, AsWeakPtr(),
- display_id, base::Passed(data.Pass())));
+ display->display_id(), display->product_id(),
+ base::Passed(data.Pass())));
}
void DisplayColorManager::UpdateCalibrationData(
- uint64_t display_id,
+ int64_t display_id,
+ int64_t product_id,
scoped_ptr<ColorCalibrationData> data,
bool success) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (success) {
// The map takes over ownership of the underlying memory.
- calibration_map_[display_id] = data.release();
+ calibration_map_[product_id] = data.release();
+ ApplyDisplayColorCalibration(display_id, product_id);
}
}
« no previous file with comments | « ash/content/display/display_color_manager_chromeos.h ('k') | chromeos/chromeos_paths.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698