Home | History | Annotate | Download | only in vnc_server
      1 #pragma once
      2 
      3 /*
      4  * Copyright (C) 2017 The Android Open Source Project
      5  *
      6  * Licensed under the Apache License, Version 2.0 (the "License");
      7  * you may not use this file except in compliance with the License.
      8  * You may obtain a copy of the License at
      9  *
     10  *      http://www.apache.org/licenses/LICENSE-2.0
     11  *
     12  * Unless required by applicable law or agreed to in writing, software
     13  * distributed under the License is distributed on an "AS IS" BASIS,
     14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     15  * See the License for the specific language governing permissions and
     16  * limitations under the License.
     17  */
     18 
     19 #include <condition_variable>
     20 #include <mutex>
     21 #ifdef FUZZ_TEST_VNC
     22 #include <random>
     23 #endif
     24 #include <thread>
     25 
     26 #include "common/libs/thread_safe_queue/thread_safe_queue.h"
     27 #include "common/libs/threads/thread_annotations.h"
     28 #include "host/frontend/vnc_server/blackboard.h"
     29 #include "host/frontend/vnc_server/screen_connector.h"
     30 
     31 namespace cvd {
     32 namespace vnc {
     33 class SimulatedHWComposer {
     34  public:
     35   SimulatedHWComposer(BlackBoard* bb);
     36   SimulatedHWComposer(const SimulatedHWComposer&) = delete;
     37   SimulatedHWComposer& operator=(const SimulatedHWComposer&) = delete;
     38   ~SimulatedHWComposer();
     39 
     40   Stripe GetNewStripe();
     41 
     42   // NOTE not constexpr on purpose
     43   static int NumberOfStripes();
     44 
     45  private:
     46   bool closed();
     47   void close();
     48   static void EraseHalfOfElements(ThreadSafeQueue<Stripe>::QueueImpl* q);
     49   void MakeStripes();
     50 
     51 #ifdef FUZZ_TEST_VNC
     52   std::default_random_engine engine_;
     53   std::uniform_int_distribution<int> random_ =
     54       std::uniform_int_distribution<int>{0, 2};
     55 #endif
     56   static constexpr int kNumStripes = 8;
     57   constexpr static std::size_t kMaxQueueElements = 64;
     58   bool closed_ GUARDED_BY(m_){};
     59   std::mutex m_;
     60   BlackBoard* bb_{};
     61   ThreadSafeQueue<Stripe> stripes_;
     62   std::thread stripe_maker_;
     63   std::shared_ptr<ScreenConnector> screen_connector_{ScreenConnector::Get()};
     64 };
     65 }  // namespace vnc
     66 }  // namespace cvd
     67