Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  nsWindowDbg.h   Sprache: C

 
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* 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 WindowDbg_h__
#define WindowDbg_h__

/*
 * nsWindowDbg - Debug related utilities for nsWindow.
 */


#include "nsWindowDefs.h"
#include "mozilla/BaseProfilerMarkersPrerequisites.h"

// Enables debug output for popup rollup hooks
// #define POPUP_ROLLUP_DEBUG_OUTPUT

// Enable window size and state debug output
// #define WINSTATE_DEBUG_OUTPUT

// nsIWidget defines a set of debug output statements
// that are called in various places within the code.
// #define WIDGET_DEBUG_OUTPUT

// Enable IS_VK_DOWN debug output
// #define DEBUG_VK

namespace mozilla::widget {

class MOZ_RAII AutoProfilerMessageMarker {
 public:
  explicit AutoProfilerMessageMarker(Span<const char> aMsgLoopName, HWND hWnd,
                                     UINT msg, WPARAM wParam, LPARAM lParam);

  ~AutoProfilerMessageMarker();

 protected:
  Maybe<MarkerOptions> mOptions;
  Span<const char> mMsgLoopName;
  UINT mMsg;
  WPARAM mWParam;
  LPARAM mLParam;
};

// Windows message debugging data
struct EventMsgInfo {
  const char* mStr;
  UINT mId;
  std::function<nsAutoCString(WPARAM, LPARAM, bool)> mParamInfoFn;
  std::function<void(nsCString&, WPARAM, const char*, bool)> mWParamInfoFn;
  const char* mWParamName;
  std::function<void(nsCString&, LPARAM, const char*, bool)> mLParamInfoFn;
  const char* mLParamName;
  void LogParameters(nsCString& str, WPARAM wParam, LPARAM lParam,
                     bool isPreCall);
};
extern std::unordered_map<UINT, EventMsgInfo> gAllEvents;

// RAII-style class to log before and after an event is handled.
class NativeEventLogger final {
 public:
  template <size_t N>
  NativeEventLogger(const char (&aMsgLoopName)[N], HWND hwnd, UINT msg,
                    WPARAM wParam, LPARAM lParam)
      : NativeEventLogger(Span(aMsgLoopName), hwnd, msg, wParam, lParam) {}

  void SetResult(LRESULT lresult, bool result) {
    mRetValue = lresult;
    mResult = mozilla::Some(result);
  }
  ~NativeEventLogger();

 private:
  NativeEventLogger(Span<const char> aMsgLoopName, HWND hwnd, UINT msg,
                    WPARAM wParam, LPARAM lParam);
  bool NativeEventLoggerInternal();

  AutoProfilerMessageMarker mProfilerMarker;
  const char* mMsgLoopName;
  const HWND mHwnd;
  const UINT mMsg;
  const WPARAM mWParam;
  const LPARAM mLParam;
  mozilla::Maybe<long> mEventCounter;
  // not const because these will be set after the event is handled
  mozilla::Maybe<bool> mResult;
  LRESULT mRetValue = 0;

  bool mShouldLogPostCall;
};

struct EnumValueAndName {
  uint64_t mFlag;
  const char* mName;
};

// Appends to str a description of the flags passed in.
// flagsAndNames is a list of flag values with a string description
// for each one. These are processed in order, so if there are
// flag values that are combination of individual values (for example
// something like WS_OVERLAPPEDWINDOW) they need to come first
// in the flagsAndNames array.
// A 0 flag value will only be written if the flags input is exactly
// 0, and it must come last in the flagsAndNames array.
// Returns whether any info was appended to str.
bool AppendFlagsInfo(nsCString& str, uint64_t flags,
                     const nsTArray<EnumValueAndName>& flagsAndNames,
                     const char* name);

nsAutoCString WmSizeParamInfo(uint64_t wParam, uint64_t lParam, bool isPreCall);
void XLowWordYHighWordParamInfo(nsCString& str, uint64_t value,
                                const char* name, bool isPreCall);
void WindowPosParamInfo(nsCString& str, uint64_t value, const char* name,
                        bool isPreCall);
void WindowEdgeParamInfo(nsCString& str, uint64_t value, const char* name,
                         bool isPreCall);
void RectParamInfo(nsCString& str, uint64_t value, const char* name,
                   bool isPreCall);
void UiActionParamInfo(nsCString& str, uint64_t value, const char* name,
                       bool isPreCall);
void WideStringParamInfo(nsCString& result, uint64_t value, const char* name,
                         bool isPreCall);
void MinMaxInfoParamInfo(nsCString& result, uint64_t value, const char* name,
                         bool isPreCall);
nsAutoCString WmNcCalcSizeParamInfo(uint64_t wParam, uint64_t lParam,
                                    bool isPreCall);
}  // namespace mozilla::widget

#if defined(POPUP_ROLLUP_DEBUG_OUTPUT)
typedef struct {
  char* mStr;
  int mId;
} MSGFEventMsgInfo;

#  define DISPLAY_NMM_PRT(_arg) \
    MOZ_LOG(gWindowsLog, mozilla::LogLevel::Info, ((_arg)));
#else
#  define DISPLAY_NMM_PRT(_arg)
#endif  // defined(POPUP_ROLLUP_DEBUG_OUTPUT)

#if defined(DEBUG)
void DDError(const char* msg, HRESULT hr);
#endif  // defined(DEBUG)

#if defined(DEBUG_VK)
bool is_vk_down(int vk);
#  define IS_VK_DOWN is_vk_down
#else
#  define IS_VK_DOWN(a) (GetKeyState(a) < 0)
#endif  // defined(DEBUG_VK)

#endif /* WindowDbg_h__ */

Messung V0.5
C=83 H=100 G=91

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge