mirror of
https://github.com/openharmony/windowmanager.git
synced 2026-07-19 17:08:11 -04:00
1.cache default Rs screenId in dms
2.add displaymanageripc_fuzzer 3.fix screenInfo name empty bug Signed-off-by: xiaojianfeng <xiaojianfeng3@huawei.com> Change-Id: I51af875b708e6b372e738c0950adb6eab2c40340
This commit is contained in:
@@ -16,6 +16,7 @@ group("fuzztest") {
|
||||
|
||||
deps = [
|
||||
"displaymanager_fuzzer:fuzztest",
|
||||
"displaymanageripc_fuzzer:fuzztest",
|
||||
"screen_fuzzer:fuzztest",
|
||||
"screenmanager_fuzzer:fuzztest",
|
||||
]
|
||||
|
||||
@@ -75,10 +75,7 @@ bool ScreenPowerFuzzTest(const uint8_t *data, size_t size)
|
||||
static_cast<PowerStateChangeReason>(startPos));
|
||||
auto allScreen = screenManager.GetAllScreens();
|
||||
for (auto screen: allScreen) {
|
||||
ScreenPowerState powerState = screenManager.GetScreenPower(screen->GetId());
|
||||
if (static_cast<ScreenPowerState>(screenPowerState) != powerState) {
|
||||
std::cout << "powerState and screenPowerState are not equal." << std::endl;
|
||||
}
|
||||
screenManager.GetScreenPower(screen->GetId());
|
||||
}
|
||||
|
||||
screenManager.UnregisterScreenGroupListener(screenGroupListener);
|
||||
@@ -110,12 +107,6 @@ bool MakeMirrorWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
|
||||
return false;
|
||||
}
|
||||
screenManager.SetVirtualScreenSurface(screenId, nullptr);
|
||||
std::vector<sptr<Screen>> screens = screenManager.GetAllScreens();
|
||||
for (auto screen : screens) {
|
||||
if (screen->GetId() != screenId) {
|
||||
std::cout << "screenId is not in screens." << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
// make mirror
|
||||
ScreenId groupId = screenManager.MakeMirror(0, { screenId });
|
||||
@@ -129,9 +120,6 @@ bool MakeMirrorWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
|
||||
return false;
|
||||
}
|
||||
std::vector<ScreenId> ids = group->GetChildIds();
|
||||
if (std::find(ids.begin(), ids.end(), screenId) == ids.end()) {
|
||||
std::cout << "screenId is not in group children." << std::endl;
|
||||
}
|
||||
screenManager.RemoveVirtualScreenFromGroup(ids);
|
||||
screenManager.DestroyVirtualScreen(screenId);
|
||||
screenManager.UnregisterScreenGroupListener(screenGroupListener);
|
||||
@@ -163,12 +151,6 @@ bool MakeExpandWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
|
||||
return false;
|
||||
}
|
||||
screenManager.SetVirtualScreenSurface(screenId, nullptr);
|
||||
std::vector<sptr<Screen>> screens = screenManager.GetAllScreens();
|
||||
for (auto screen : screens) {
|
||||
if (screen->GetId() != screenId) {
|
||||
std::cout << "screenId is not in screens." << std::endl;
|
||||
}
|
||||
}
|
||||
// make expand
|
||||
std::vector<ExpandOption> options = {{0, 0, 0}, {screenId, 0, 0}};
|
||||
ScreenId groupId = screenManager.MakeExpand(options);
|
||||
@@ -182,9 +164,6 @@ bool MakeExpandWithVirtualScreenFuzzTest(const uint8_t *data, size_t size)
|
||||
return false;
|
||||
}
|
||||
std::vector<ScreenId> ids = group->GetChildIds();
|
||||
if (std::find(ids.begin(), ids.end(), screenId) == ids.end()) {
|
||||
std::cout << "screenId is not in group children." << std::endl;
|
||||
}
|
||||
screenManager.RemoveVirtualScreenFromGroup(ids);
|
||||
screenManager.DestroyVirtualScreen(screenId);
|
||||
screenManager.UnregisterScreenGroupListener(screenGroupListener);
|
||||
|
||||
@@ -137,6 +137,7 @@ private:
|
||||
std::map<sptr<IRemoteObject>, std::vector<ScreenId>> screenAgentMap_;
|
||||
sptr<AbstractScreenCallback> abstractScreenCallback_;
|
||||
std::shared_ptr<AppExecFwk::EventHandler> controllerHandler_;
|
||||
std::atomic<ScreenId> defaultRsScreenId_ {SCREEN_ID_INVALID };
|
||||
};
|
||||
} // namespace OHOS::Rosen
|
||||
#endif // FOUNDATION_DMSERVER_ABSTRACT_SCREEN_CONTROLLER_H
|
||||
@@ -194,6 +194,7 @@ void AbstractScreen::FillScreenInfo(sptr<ScreenInfo> info) const
|
||||
return;
|
||||
}
|
||||
info->id_ = dmsId_;
|
||||
info->name_ = name_;
|
||||
uint32_t width = 0;
|
||||
uint32_t height = 0;
|
||||
sptr<SupportedScreenModes> abstractScreenModes = GetActiveScreenMode();
|
||||
|
||||
@@ -182,20 +182,22 @@ sptr<AbstractScreenGroup> AbstractScreenController::GetAbstractScreenGroup(Scree
|
||||
|
||||
ScreenId AbstractScreenController::GetDefaultAbstractScreenId()
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> lock(mutex_);
|
||||
ScreenId rsDefaultId = rsInterface_.GetDefaultScreenId();
|
||||
if (rsDefaultId == SCREEN_ID_INVALID) {
|
||||
if (defaultRsScreenId_ == SCREEN_ID_INVALID) {
|
||||
defaultRsScreenId_ = rsInterface_.GetDefaultScreenId();
|
||||
}
|
||||
if (defaultRsScreenId_ == SCREEN_ID_INVALID) {
|
||||
WLOGFW("GetDefaultAbstractScreenId, rsDefaultId is invalid.");
|
||||
return SCREEN_ID_INVALID;
|
||||
}
|
||||
std::lock_guard<std::recursive_mutex> lock(mutex_);
|
||||
ScreenId defaultDmsScreenId;
|
||||
if (screenIdManager_.ConvertToDmsScreenId(rsDefaultId, defaultDmsScreenId)) {
|
||||
if (screenIdManager_.ConvertToDmsScreenId(defaultRsScreenId_, defaultDmsScreenId)) {
|
||||
WLOGI("GetDefaultAbstractScreenId, screen:%{public}" PRIu64"", defaultDmsScreenId);
|
||||
return defaultDmsScreenId;
|
||||
}
|
||||
WLOGFI("GetDefaultAbstractScreenId, default screen is null, try to get.");
|
||||
ProcessScreenConnected(rsDefaultId);
|
||||
return screenIdManager_.ConvertToDmsScreenId(rsDefaultId);
|
||||
ProcessScreenConnected(defaultRsScreenId_);
|
||||
return screenIdManager_.ConvertToDmsScreenId(defaultRsScreenId_);
|
||||
}
|
||||
|
||||
ScreenId AbstractScreenController::ConvertToRsScreenId(ScreenId dmsScreenId) const
|
||||
@@ -220,12 +222,14 @@ void AbstractScreenController::OnRsScreenConnectionChange(ScreenId rsScreenId, S
|
||||
{
|
||||
WLOGFI("rs screen event. id:%{public}" PRIu64", event:%{public}u", rsScreenId, static_cast<uint32_t>(screenEvent));
|
||||
if (screenEvent == ScreenEvent::CONNECTED) {
|
||||
ProcessScreenConnected(rsScreenId);
|
||||
auto task = [this, rsScreenId] {
|
||||
ProcessScreenConnected(rsScreenId);
|
||||
};
|
||||
controllerHandler_->PostTask(task, AppExecFwk::EventQueue::Priority::HIGH);
|
||||
} else if (screenEvent == ScreenEvent::DISCONNECTED) {
|
||||
if (rsScreenId == defaultRsScreenId_) {
|
||||
defaultRsScreenId_ = SCREEN_ID_INVALID;
|
||||
}
|
||||
auto task = [this, rsScreenId] {
|
||||
ProcessScreenDisconnected(rsScreenId);
|
||||
};
|
||||
@@ -1195,6 +1199,9 @@ bool AbstractScreenController::SetScreenPowerForAll(ScreenPowerState state, Powe
|
||||
bool hasSetScreenPower = false;
|
||||
for (auto screenId : screenIds) {
|
||||
auto screen = GetAbstractScreen(screenId);
|
||||
if (screen == nullptr) {
|
||||
continue;
|
||||
}
|
||||
if (screen->type_ != ScreenType::REAL) {
|
||||
WLOGD("skip virtual screen %{public}" PRIu64"", screen->dmsId_);
|
||||
continue;
|
||||
|
||||
@@ -36,7 +36,7 @@ public:
|
||||
virtual bool Marshalling(Parcel& parcel) const override;
|
||||
static ScreenInfo* Unmarshalling(Parcel& parcel);
|
||||
|
||||
DEFINE_VAR_FUNC_GET(std::string, Name, name);
|
||||
DEFINE_VAR_DEFAULT_FUNC_GET(std::string, Name, name, "");
|
||||
DEFINE_VAR_DEFAULT_FUNC_GET(ScreenId, ScreenId, id, SCREEN_ID_INVALID);
|
||||
DEFINE_VAR_DEFAULT_FUNC_GET(uint32_t, VirtualWidth, virtualWidth, 0);
|
||||
DEFINE_VAR_DEFAULT_FUNC_GET(uint32_t, VirtualHeight, virtualHeight, 0);
|
||||
|
||||
Reference in New Issue
Block a user