display_manager_service.cpp revision 3f82d31341f66d0c58e1ec3360ea5f528ffe0ea4
1a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko#include "display_manager_service.h" 2a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 3a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko#include <pdx/channel_handle.h> 4a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko#include <pdx/default_transport/service_endpoint.h> 5eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <private/android_filesystem_config.h> 63f82d31341f66d0c58e1ec3360ea5f528ffe0ea4Corey Tabaka#include <private/dvr/display_protocol.h> 7eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar#include <private/dvr/trusted_uids.h> 8a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko#include <sys/poll.h> 9a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 10a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko#include <array> 11a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 12a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkousing android::pdx::Channel; 13a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkousing android::pdx::LocalChannelHandle; 14a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkousing android::pdx::Message; 15a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkousing android::pdx::default_transport::Endpoint; 16a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkousing android::pdx::rpc::DispatchRemoteMethod; 17a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkousing android::pdx::rpc::IfAnyOf; 18a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 19a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkonamespace { 20a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 21a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko// As a first line of defense, the display manager endpoint is only accessible 22a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko// to the user and group. 23a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 24a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko// TODO(dnicoara): Remove read/write permission for others. This is in here just 25a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko// to allow us to experiment with cast functionality from a plain old app. 26a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkoconstexpr mode_t kDisplayManagerEndpointFileMode = 27a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH; 28a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 29a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkoconstexpr size_t kMaxSurfacesPerRequest = 32; 30a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 31a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} // anonymous namespace 32a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 33a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkonamespace android { 34a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkonamespace dvr { 35a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 36a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkovoid DisplayManager::SetNotificationsPending(bool pending) { 37f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenko auto status = service_->ModifyChannelEvents(channel_id_, pending ? 0 : POLLIN, 38f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenko pending ? POLLIN : 0); 39f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenko ALOGE_IF(!status, 40a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko "DisplayManager::SetNotificationPending: Failed to modify channel " 41a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko "events: %s", 42f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenko status.GetErrorMessage().c_str()); 43a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 44a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 45a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex VakulenkoDisplayManagerService::DisplayManagerService( 46a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko const std::shared_ptr<DisplayService>& display_service) 47a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko : BASE("DisplayManagerService", 48a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko Endpoint::Create(DisplayManagerRPC::kClientPath, 49a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko kDisplayManagerEndpointFileMode)), 50a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_service_(display_service) { 51a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_service_->SetDisplayConfigurationUpdateNotifier( 52a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko std::bind(&DisplayManagerService::OnDisplaySurfaceChange, this)); 53a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 54a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 55a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkostd::shared_ptr<pdx::Channel> DisplayManagerService::OnChannelOpen( 56a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko pdx::Message& message) { 57a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko // Prevent more than one display manager from registering at a time. 58a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko if (display_manager_) 59a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko REPLY_ERROR_RETURN(message, EPERM, nullptr); 60a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 61a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_manager_ = 62a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko std::make_shared<DisplayManager>(this, message.GetChannelId()); 63a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko return display_manager_; 64a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 65a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 66a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkovoid DisplayManagerService::OnChannelClose( 67a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko pdx::Message& /*message*/, const std::shared_ptr<pdx::Channel>& channel) { 68a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko // Unregister the display manager when the channel closes. 69a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko if (display_manager_ == channel) 70a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_manager_ = nullptr; 71a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 72a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 73f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenkopdx::Status<void> DisplayManagerService::HandleMessage(pdx::Message& message) { 74a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko auto channel = std::static_pointer_cast<DisplayManager>(message.GetChannel()); 75a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 76a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko switch (message.GetOp()) { 77a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko case DisplayManagerRPC::GetSurfaceList::Opcode: 78a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko DispatchRemoteMethod<DisplayManagerRPC::GetSurfaceList>( 79a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko *this, &DisplayManagerService::OnGetSurfaceList, message); 80f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenko return {}; 81a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 82a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko case DisplayManagerRPC::UpdateSurfaces::Opcode: 83a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko DispatchRemoteMethod<DisplayManagerRPC::UpdateSurfaces>( 84a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko *this, &DisplayManagerService::OnUpdateSurfaces, message); 85f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenko return {}; 86a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 87eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar case DisplayManagerRPC::SetupNamedBuffer::Opcode: 88eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar DispatchRemoteMethod<DisplayManagerRPC::SetupNamedBuffer>( 89eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar *this, &DisplayManagerService::OnSetupNamedBuffer, message); 90f0a7bd033941e26e380232a0515e903cf8e678e5Alex Vakulenko return {}; 9110e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar 92a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko default: 93a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko return Service::DefaultHandleMessage(message); 94a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko } 95a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 96a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 97a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkostd::vector<DisplaySurfaceInfo> DisplayManagerService::OnGetSurfaceList( 98a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko pdx::Message& /*message*/) { 99a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko std::vector<DisplaySurfaceInfo> items; 100a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 10110e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar display_service_->ForEachDisplaySurface( 10210e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar [&items](const std::shared_ptr<DisplaySurface>& surface) mutable { 10310e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar DisplaySurfaceInfo item; 10410e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar 10510e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar item.surface_id = surface->surface_id(); 10610e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar item.process_id = surface->process_id(); 10710e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar item.type = surface->type(); 10810e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar item.flags = 0; // TODO(eieio) 10910e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar item.client_attributes = DisplaySurfaceAttributes{ 11010e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar {DisplaySurfaceAttributeEnum::Visible, 11110e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar DisplaySurfaceAttributeValue{surface->client_visible()}}, 11210e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar {DisplaySurfaceAttributeEnum::ZOrder, 11310e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar DisplaySurfaceAttributeValue{surface->client_z_order()}}, 11410e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar {DisplaySurfaceAttributeEnum::Blur, 11510e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar DisplaySurfaceAttributeValue{0.f}}}; 11610e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar item.manager_attributes = DisplaySurfaceAttributes{ 11710e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar {DisplaySurfaceAttributeEnum::Visible, 11810e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar DisplaySurfaceAttributeValue{surface->manager_visible()}}, 11910e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar {DisplaySurfaceAttributeEnum::ZOrder, 12010e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar DisplaySurfaceAttributeValue{surface->manager_z_order()}}, 12110e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar {DisplaySurfaceAttributeEnum::Blur, 12210e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar DisplaySurfaceAttributeValue{surface->manager_blur()}}}; 12310e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar 12410e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar items.push_back(item); 12510e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar }); 126a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 127a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko // The fact that we're in the message handler implies that display_manager_ is 128a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko // not nullptr. No check required, unless this service becomes multi-threaded. 129a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_manager_->SetNotificationsPending(false); 130a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 131a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko return items; 132a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 133a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 134a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkoint DisplayManagerService::OnUpdateSurfaces( 135a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko pdx::Message& /*message*/, 136a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko const std::map<int, DisplaySurfaceAttributes>& updates) { 137a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko for (const auto& surface_update : updates) { 138a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko const int surface_id = surface_update.first; 139a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko const DisplaySurfaceAttributes& attributes = surface_update.second; 140a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 141a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko std::shared_ptr<DisplaySurface> surface = 142a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_service_->GetDisplaySurface(surface_id); 143a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 144a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko if (!surface) 145a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko return -ENOENT; 146a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 147a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko for (const auto& attribute : attributes) { 148a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko const auto& key = attribute.first; 149a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko const auto* variant = &attribute.second; 150a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko bool invalid_value = false; 151a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko switch (key) { 152a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko case DisplaySurfaceAttributeEnum::ZOrder: 153a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko invalid_value = 154a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko !IfAnyOf<int32_t>::Call(variant, [&surface](const auto& value) { 155a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko surface->ManagerSetZOrder(value); 156a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko }); 157a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko break; 158a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko case DisplaySurfaceAttributeEnum::Visible: 159a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko invalid_value = !IfAnyOf<int32_t, int64_t, bool>::Call( 160a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko variant, [&surface](const auto& value) { 161a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko surface->ManagerSetVisible(value); 162a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko }); 163a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko break; 164a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko case DisplaySurfaceAttributeEnum::Blur: 165a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko invalid_value = !IfAnyOf<int32_t, int64_t, float>::Call( 166a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko variant, [&surface](const auto& value) { 167a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko surface->ManagerSetBlur(value); 168a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko }); 169a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko break; 170a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko default: 171a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko ALOGW( 172a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko "DisplayManagerService::OnUpdateSurfaces: Attempt to set invalid " 173a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko "attribute %u on surface %d", 174a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko key, surface_id); 175a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko break; 176a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko } 177a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 178a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko if (invalid_value) { 179a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko ALOGW( 180a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko "DisplayManagerService::OnUpdateSurfaces: Failed to set display " 181a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko "surface attribute '%s' because of incompatible type: %d", 182a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko DisplaySurfaceAttributeEnum::ToString(key).c_str(), 183a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko variant->index()); 184a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko } 185a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko } 186a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko } 187a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 188a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko // Reconfigure the display layers for any active surface changes. 189a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_service_->UpdateActiveDisplaySurfaces(); 190a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko return 0; 191a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 192a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 193eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaarpdx::Status<BorrowedNativeBufferHandle> 194eaa5522feac452703a0836310047d4b15702487dHendrik WagenaarDisplayManagerService::OnSetupNamedBuffer(pdx::Message& message, 195eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar const std::string& name, size_t size, 1960057fddc71d1c3c3de8f9d0bd45a51bb293bfa3cJiwen 'Steve' Cai uint64_t usage) { 197eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar if (message.GetEffectiveUserId() != AID_ROOT && 198eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar !IsTrustedUid(message.GetEffectiveUserId())) { 199eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar // Only trusted users can setup named buffers. 200eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar ALOGE("DisplayService::SetupNamedBuffer: Called by untrusted user: uid=%d.", 201eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar message.GetEffectiveUserId()); 202eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar return {}; 203eaa5522feac452703a0836310047d4b15702487dHendrik Wagenaar } 2040057fddc71d1c3c3de8f9d0bd45a51bb293bfa3cJiwen 'Steve' Cai return display_service_->SetupNamedBuffer(name, size, usage); 20510e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar} 20610e68eb8aa4db8b6f8cfbf2c3754e2677d7bf848Hendrik Wagenaar 207a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenkovoid DisplayManagerService::OnDisplaySurfaceChange() { 208a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko if (display_manager_) { 209a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_manager_->SetNotificationsPending(true); 210a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko } else { 211a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko // If there isn't a display manager registered, default all display surfaces 212a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko // to visible. 213a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_service_->ForEachDisplaySurface( 214a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko [](const std::shared_ptr<DisplaySurface>& surface) { 215a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko surface->ManagerSetVisible(true); 216a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko }); 217a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko display_service_->UpdateActiveDisplaySurfaces(); 218a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko } 219a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} 220a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko 221a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} // namespace dvr 222a8a92784bc5f6a50ce00311c6161fbcfc0898c5aAlex Vakulenko} // namespace android 223