widget/ScreenProxy.h
author Chris H-C <chutten@mozilla.com>
Fri, 12 Aug 2016 14:51:48 -0400
changeset 314448 c97a5b2b086accd52fb5dd0b27eb6d5127fb6fc8
parent 310027 4eb5775fd334887121a7a779a27e6727acdcb25f
child 315846 75abc730f8202005d6469a7ec324b7aba5a89374
permissions -rw-r--r--
bug 1218576 - Aggregate child categorical histograms in the parent process. r=gfritzsche Rewrite the categorical histogram accumulation code to use the common path. This way it gets remote accumulation for cheap. MozReview-Commit-ID: 3q6gdSvBix

/* -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 2; -*- */
/* vim: set sw=4 ts=8 et tw=80 : */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef mozilla_widget_ScreenProxy_h
#define mozilla_widget_ScreenProxy_h

#include "nsBaseScreen.h"
#include "mozilla/dom/PScreenManagerChild.h"
#include "mozilla/dom/TabChild.h"

class nsScreenManagerProxy;

namespace mozilla {
namespace widget {

class ScreenProxy : public nsBaseScreen
{
public:
    ScreenProxy(nsScreenManagerProxy* aScreenManager,
                mozilla::dom::ScreenDetails aDetails);
    ~ScreenProxy() {};

    NS_IMETHOD GetId(uint32_t* aId) override;

    NS_IMETHOD GetRect(int32_t* aLeft,
                       int32_t* aTop,
                       int32_t* aWidth,
                       int32_t* aHeight) override;
    NS_IMETHOD GetRectDisplayPix(int32_t* aLeft,
                                 int32_t* aTop,
                                 int32_t* aWidth,
                                 int32_t* aHeight) override;
    NS_IMETHOD GetAvailRect(int32_t* aLeft,
                            int32_t* aTop,
                            int32_t* aWidth,
                            int32_t* aHeight) override;
    NS_IMETHOD GetAvailRectDisplayPix(int32_t* aLeft,
                                      int32_t* aTop,
                                      int32_t* aWidth,
                                      int32_t* aHeight) override;
    NS_IMETHOD GetPixelDepth(int32_t* aPixelDepth) override;
    NS_IMETHOD GetColorDepth(int32_t* aColorDepth) override;

    NS_IMETHOD GetContentsScaleFactor(double* aContentsScaleFactor) override;
    NS_IMETHOD GetDefaultCSSScaleFactor(double* aScaleFactor) override;

private:

    void PopulateByDetails(mozilla::dom::ScreenDetails aDetails);
    bool EnsureCacheIsValid();
    void InvalidateCacheOnNextTick();
    void InvalidateCache();

    double mContentsScaleFactor;
    double mDefaultCSSScaleFactor;
    RefPtr<nsScreenManagerProxy> mScreenManager;
    uint32_t mId;
    int32_t mPixelDepth;
    int32_t mColorDepth;
    nsIntRect mRect;
    nsIntRect mRectDisplayPix;
    nsIntRect mAvailRect;
    nsIntRect mAvailRectDisplayPix;
    bool mCacheValid;
    bool mCacheWillInvalidate;
};

} // namespace widget
} // namespace mozilla

#endif