Home | History | Annotate | Download | only in hwc2
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include <sstream>
     18 #include <sys/stat.h>
     19 
     20 #include "Hwc2TestVirtualDisplay.h"
     21 
     22 #define DIR_NAME "images"
     23 
     24 Hwc2TestVirtualDisplay::Hwc2TestVirtualDisplay(
     25         Hwc2TestCoverage coverage)
     26     : mDisplayDimension(coverage)
     27 {
     28     mDisplayDimension.setDependent(&mOutputBuffer);
     29     mDisplayDimension.setDependent(&mExpectedBuffer);
     30 }
     31 
     32 std::string Hwc2TestVirtualDisplay::dump() const
     33 {
     34     std::stringstream dmp;
     35 
     36     dmp << "virtual display: \n";
     37 
     38     mDisplayDimension.dump();
     39 
     40     return dmp.str();
     41 }
     42 
     43 int Hwc2TestVirtualDisplay::getOutputBuffer(buffer_handle_t* outHandle,
     44         android::base::unique_fd* outAcquireFence)
     45 {
     46     int32_t acquireFence;
     47     int ret = mOutputBuffer.getOutputBuffer(outHandle, &acquireFence);
     48     outAcquireFence->reset(acquireFence);
     49     return ret;
     50 }
     51 
     52 void Hwc2TestVirtualDisplay::reset()
     53 {
     54     return mDisplayDimension.reset();
     55 }
     56 
     57 bool Hwc2TestVirtualDisplay::advance()
     58 {
     59     return mDisplayDimension.advance();
     60 }
     61 
     62 UnsignedArea Hwc2TestVirtualDisplay::getDisplayDimension() const
     63 {
     64     return mDisplayDimension.get();
     65 }
     66 
     67 int Hwc2TestVirtualDisplay::verifyOutputBuffer(const Hwc2TestLayers* testLayers,
     68         const std::vector<hwc2_layer_t>* allLayers,
     69         const std::set<hwc2_layer_t>* clearLayers)
     70 {
     71     int ret = mExpectedBuffer.generateExpectedBuffer(testLayers, allLayers,
     72             clearLayers);
     73     if (ret)
     74         return ret;
     75 
     76     ComparatorResult::get().CompareBuffers(mOutputBuffer.graphicBuffer(),
     77         mExpectedBuffer.graphicBuffer());
     78 
     79     return 0;
     80 }
     81 
     82 int Hwc2TestVirtualDisplay::writeBuffersToFile(std::string name)
     83 {
     84     std::ostringstream expectedPath;
     85     std::ostringstream resultPath;
     86     int ret = mkdir(DIR_NAME, DEFFILEMODE);
     87     if (ret && errno != EEXIST)
     88         return ret;
     89 
     90     expectedPath << DIR_NAME << "/expected-" << name << ".png";
     91     resultPath << DIR_NAME << "/result-" << name << ".png";
     92 
     93     if (!mExpectedBuffer.writeBufferToFile(expectedPath.str()) ||
     94             !mOutputBuffer.writeBufferToFile(resultPath.str()))
     95         return -1;
     96 
     97     return 0;
     98 }
     99